super-three 0.152.0 → 0.154.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 (339) hide show
  1. package/build/three.cjs +779 -557
  2. package/build/three.js +779 -557
  3. package/build/three.min.js +2 -1
  4. package/build/three.module.js +770 -539
  5. package/build/three.module.min.js +2 -1
  6. package/examples/jsm/cameras/CinematicCamera.js +1 -2
  7. package/examples/jsm/capabilities/WebGPU.js +15 -1
  8. package/examples/jsm/controls/ArcballControls.js +2 -1
  9. package/examples/jsm/controls/FlyControls.js +25 -9
  10. package/examples/jsm/controls/OrbitControls.js +5 -1
  11. package/examples/jsm/csm/CSM.js +1 -3
  12. package/examples/jsm/effects/AnaglyphEffect.js +6 -20
  13. package/examples/jsm/effects/OutlineEffect.js +1 -1
  14. package/examples/jsm/effects/ParallaxBarrierEffect.js +3 -0
  15. package/examples/jsm/environments/RoomEnvironment.js +6 -2
  16. package/examples/jsm/exporters/GLTFExporter.js +74 -2
  17. package/examples/jsm/exporters/USDZExporter.js +170 -129
  18. package/examples/jsm/helpers/ViewHelper.js +1 -1
  19. package/examples/jsm/lines/LineMaterial.js +1 -1
  20. package/examples/jsm/loaders/3DMLoader.js +1 -1
  21. package/examples/jsm/loaders/3MFLoader.js +5 -1
  22. package/examples/jsm/loaders/AMFLoader.js +5 -1
  23. package/examples/jsm/loaders/ColladaLoader.js +4 -1
  24. package/examples/jsm/loaders/DRACOLoader.js +2 -0
  25. package/examples/jsm/loaders/FBXLoader.js +9 -2
  26. package/examples/jsm/loaders/GLTFLoader.js +230 -94
  27. package/examples/jsm/loaders/KTX2Loader.js +106 -47
  28. package/examples/jsm/loaders/LDrawLoader.js +4 -7
  29. package/examples/jsm/loaders/MMDLoader.js +40 -13
  30. package/examples/jsm/loaders/PCDLoader.js +25 -10
  31. package/examples/jsm/loaders/PDBLoader.js +7 -2
  32. package/examples/jsm/loaders/PLYLoader.js +30 -8
  33. package/examples/jsm/loaders/STLLoader.js +8 -3
  34. package/examples/jsm/loaders/VRMLLoader.js +55 -7
  35. package/examples/jsm/loaders/VTKLoader.js +12 -4
  36. package/examples/jsm/loaders/XYZLoader.js +9 -3
  37. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -2
  38. package/examples/jsm/math/Lut.js +5 -4
  39. package/examples/jsm/math/MeshSurfaceSampler.js +82 -37
  40. package/examples/jsm/misc/GPUComputationRenderer.js +1 -0
  41. package/examples/jsm/misc/VolumeSlice.js +3 -1
  42. package/examples/jsm/nodes/Nodes.js +22 -16
  43. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +99 -0
  44. package/examples/jsm/nodes/accessors/BufferNode.js +2 -2
  45. package/examples/jsm/nodes/accessors/CameraNode.js +25 -4
  46. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +7 -1
  47. package/examples/jsm/nodes/accessors/InstanceNode.js +29 -12
  48. package/examples/jsm/nodes/accessors/MaterialNode.js +55 -47
  49. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -2
  50. package/examples/jsm/nodes/accessors/ModelNode.js +3 -1
  51. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +4 -9
  52. package/examples/jsm/nodes/accessors/MorphNode.js +70 -0
  53. package/examples/jsm/nodes/accessors/NormalNode.js +3 -2
  54. package/examples/jsm/nodes/accessors/Object3DNode.js +10 -2
  55. package/examples/jsm/nodes/accessors/ReferenceNode.js +2 -2
  56. package/examples/jsm/nodes/accessors/SceneNode.js +46 -0
  57. package/examples/jsm/nodes/accessors/SkinningNode.js +43 -62
  58. package/examples/jsm/nodes/accessors/StorageBufferNode.js +2 -2
  59. package/examples/jsm/nodes/accessors/TangentNode.js +2 -2
  60. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -0
  61. package/examples/jsm/nodes/accessors/TextureNode.js +68 -6
  62. package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -0
  63. package/examples/jsm/nodes/accessors/UVNode.js +1 -1
  64. package/examples/jsm/nodes/code/CodeNode.js +3 -0
  65. package/examples/jsm/nodes/code/FunctionNode.js +25 -4
  66. package/examples/jsm/nodes/core/AttributeNode.js +1 -1
  67. package/examples/jsm/nodes/core/BypassNode.js +2 -2
  68. package/examples/jsm/nodes/core/ContextNode.js +2 -0
  69. package/examples/jsm/nodes/core/IndexNode.js +66 -0
  70. package/examples/jsm/nodes/core/LightingModel.js +2 -1
  71. package/examples/jsm/nodes/core/Node.js +13 -16
  72. package/examples/jsm/nodes/core/NodeAttribute.js +2 -1
  73. package/examples/jsm/nodes/core/NodeBuilder.js +86 -8
  74. package/examples/jsm/nodes/core/NodeUtils.js +10 -0
  75. package/examples/jsm/nodes/core/PropertyNode.js +6 -2
  76. package/examples/jsm/nodes/core/StackNode.js +8 -1
  77. package/examples/jsm/nodes/core/UniformNode.js +1 -1
  78. package/examples/jsm/nodes/core/VarNode.js +1 -3
  79. package/examples/jsm/nodes/display/BlendModeNode.js +9 -9
  80. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +7 -7
  81. package/examples/jsm/nodes/display/ColorSpaceNode.js +50 -49
  82. package/examples/jsm/nodes/display/NormalMapNode.js +3 -3
  83. package/examples/jsm/nodes/display/ToneMappingNode.js +24 -15
  84. package/examples/jsm/nodes/display/ViewportDepthNode.js +69 -0
  85. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +34 -0
  86. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +7 -6
  87. package/examples/jsm/nodes/display/ViewportTextureNode.js +33 -19
  88. package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +5 -5
  89. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -8
  90. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  91. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +43 -0
  92. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +4 -4
  93. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +2 -2
  94. package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
  95. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +2 -4
  96. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  97. package/examples/jsm/nodes/functions/PhongLightingModel.js +7 -7
  98. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +132 -19
  99. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +2 -2
  100. package/examples/jsm/nodes/functions/material/getRoughness.js +3 -3
  101. package/examples/jsm/nodes/geometry/RangeNode.js +33 -51
  102. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +6 -3
  103. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -2
  104. package/examples/jsm/nodes/lighting/EnvironmentNode.js +107 -62
  105. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +2 -2
  106. package/examples/jsm/nodes/lighting/LightUtils.js +2 -2
  107. package/examples/jsm/nodes/lighting/LightingContextNode.js +17 -15
  108. package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
  109. package/examples/jsm/nodes/lighting/SpotLightNode.js +3 -3
  110. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -15
  111. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -15
  112. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -10
  113. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -9
  114. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +41 -0
  115. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +1 -14
  116. package/examples/jsm/nodes/materials/NodeMaterial.js +119 -29
  117. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -9
  118. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  119. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +3 -3
  120. package/examples/jsm/nodes/materialx/lib/mx_noise.js +14 -14
  121. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +4 -4
  122. package/examples/jsm/nodes/math/MathNode.js +6 -0
  123. package/examples/jsm/nodes/math/OperatorNode.js +1 -1
  124. package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
  125. package/examples/jsm/nodes/shadernode/ShaderNode.js +60 -33
  126. package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -3
  127. package/examples/jsm/nodes/utils/LoopNode.js +186 -0
  128. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +1 -1
  129. package/examples/jsm/objects/GroundProjectedSkybox.js +1 -1
  130. package/examples/jsm/objects/Lensflare.js +3 -4
  131. package/examples/jsm/objects/MarchingCubes.js +5 -1
  132. package/examples/jsm/objects/Reflector.js +4 -1
  133. package/examples/jsm/objects/Refractor.js +1 -1
  134. package/examples/jsm/objects/Sky.js +1 -1
  135. package/examples/jsm/objects/Water.js +2 -1
  136. package/examples/jsm/objects/Water2.js +1 -1
  137. package/examples/jsm/offscreen/scene.js +1 -0
  138. package/examples/jsm/physics/RapierPhysics.js +93 -133
  139. package/examples/jsm/postprocessing/AfterimagePass.js +3 -0
  140. package/examples/jsm/postprocessing/BloomPass.js +7 -2
  141. package/examples/jsm/postprocessing/BokehPass.js +3 -2
  142. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  143. package/examples/jsm/postprocessing/EffectComposer.js +4 -1
  144. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  145. package/examples/jsm/postprocessing/OutlinePass.js +8 -9
  146. package/examples/jsm/postprocessing/OutputPass.js +72 -0
  147. package/examples/jsm/postprocessing/RenderPixelatedPass.js +4 -3
  148. package/examples/jsm/postprocessing/SAOPass.js +4 -2
  149. package/examples/jsm/postprocessing/SMAAPass.js +5 -2
  150. package/examples/jsm/postprocessing/SSAARenderPass.js +5 -13
  151. package/examples/jsm/postprocessing/SSAOPass.js +4 -2
  152. package/examples/jsm/postprocessing/SSRPass.js +3 -1
  153. package/examples/jsm/postprocessing/SavePass.js +5 -2
  154. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  155. package/examples/jsm/postprocessing/TAARenderPass.js +17 -4
  156. package/examples/jsm/postprocessing/TexturePass.js +2 -1
  157. package/examples/jsm/postprocessing/UnrealBloomPass.js +13 -13
  158. package/examples/jsm/renderers/{webgpu/WebGPUAnimation.js → common/Animation.js} +2 -2
  159. package/examples/jsm/renderers/common/Attributes.js +75 -0
  160. package/examples/jsm/renderers/common/Backend.js +162 -0
  161. package/examples/jsm/renderers/common/Background.js +134 -0
  162. package/examples/jsm/renderers/common/Binding.js +11 -0
  163. package/examples/jsm/renderers/common/Bindings.js +169 -0
  164. package/examples/jsm/renderers/common/Buffer.js +38 -0
  165. package/examples/jsm/renderers/{webgpu/WebGPUBufferUtils.js → common/BufferUtils.js} +2 -2
  166. package/examples/jsm/renderers/{webgpu/WebGPUWeakMap.js → common/ChainMap.js} +11 -5
  167. package/examples/jsm/renderers/common/ComputePipeline.js +17 -0
  168. package/examples/jsm/renderers/common/Constants.js +14 -0
  169. package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -0
  170. package/examples/jsm/renderers/common/DataMap.js +54 -0
  171. package/examples/jsm/renderers/{webgpu/WebGPUGeometries.js → common/Geometries.js} +38 -37
  172. package/examples/jsm/renderers/{webgpu/WebGPUInfo.js → common/Info.js} +2 -3
  173. package/examples/jsm/renderers/common/Pipeline.js +13 -0
  174. package/examples/jsm/renderers/common/Pipelines.js +321 -0
  175. package/examples/jsm/renderers/common/ProgrammableStage.js +18 -0
  176. package/examples/jsm/renderers/common/RenderContext.js +37 -0
  177. package/examples/jsm/renderers/common/RenderContexts.js +38 -0
  178. package/examples/jsm/renderers/{webgpu/WebGPURenderLists.js → common/RenderList.js} +2 -39
  179. package/examples/jsm/renderers/common/RenderLists.js +38 -0
  180. package/examples/jsm/renderers/common/RenderObject.js +113 -0
  181. package/examples/jsm/renderers/common/RenderObjects.js +92 -0
  182. package/examples/jsm/renderers/common/RenderPipeline.js +16 -0
  183. package/examples/jsm/renderers/{webgpu/WebGPURenderTarget.js → common/RenderTarget.js} +2 -2
  184. package/examples/jsm/renderers/common/Renderer.js +864 -0
  185. package/examples/jsm/renderers/common/SampledTexture.js +80 -0
  186. package/examples/jsm/renderers/common/Sampler.js +18 -0
  187. package/examples/jsm/renderers/common/StorageBuffer.js +17 -0
  188. package/examples/jsm/renderers/common/Textures.js +206 -0
  189. package/examples/jsm/renderers/{webgpu/WebGPUUniform.js → common/Uniform.js} +13 -9
  190. package/examples/jsm/renderers/common/UniformBuffer.js +15 -0
  191. package/examples/jsm/renderers/{webgpu/WebGPUUniformsGroup.js → common/UniformsGroup.js} +13 -13
  192. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodes.js → common/nodes/NodeRender.js} +3 -3
  193. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampledTexture.js → common/nodes/NodeSampledTexture.js} +4 -4
  194. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampler.js → common/nodes/NodeSampler.js} +3 -3
  195. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeUniform.js → common/nodes/NodeUniform.js} +1 -1
  196. package/examples/jsm/renderers/common/nodes/Nodes.js +319 -0
  197. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +340 -0
  198. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +23 -19
  199. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +847 -0
  200. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +15 -1131
  201. package/examples/jsm/renderers/webgpu/nodes/{WebGPUNodeBuilder.js → WGSLNodeBuilder.js} +75 -45
  202. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeFunction.js +2 -2
  203. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeParser.js +1 -1
  204. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +255 -0
  205. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +145 -0
  206. package/examples/jsm/renderers/webgpu/{constants.js → utils/WebGPUConstants.js} +6 -7
  207. package/examples/jsm/renderers/webgpu/{WebGPURenderPipeline.js → utils/WebGPUPipelineUtils.js} +154 -247
  208. package/examples/jsm/renderers/webgpu/{WebGPUTextureUtils.js → utils/WebGPUTextureMipmapUtils.js} +3 -25
  209. package/examples/jsm/renderers/webgpu/{WebGPUTextures.js → utils/WebGPUTextureUtils.js} +392 -505
  210. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +92 -0
  211. package/examples/jsm/shaders/BleachBypassShader.js +2 -0
  212. package/examples/jsm/shaders/BlendShader.js +1 -2
  213. package/examples/jsm/shaders/BokehShader2.js +3 -0
  214. package/examples/jsm/shaders/ColorifyShader.js +2 -0
  215. package/examples/jsm/shaders/ConvolutionShader.js +2 -0
  216. package/examples/jsm/shaders/CopyShader.js +4 -2
  217. package/examples/jsm/shaders/DotScreenShader.js +2 -0
  218. package/examples/jsm/shaders/ExposureShader.js +44 -0
  219. package/examples/jsm/shaders/FilmShader.js +2 -0
  220. package/examples/jsm/shaders/GammaCorrectionShader.js +2 -0
  221. package/examples/jsm/shaders/HorizontalBlurShader.js +2 -0
  222. package/examples/jsm/shaders/OutputShader.js +61 -0
  223. package/examples/jsm/shaders/RGBShiftShader.js +2 -0
  224. package/examples/jsm/shaders/SepiaShader.js +2 -0
  225. package/examples/jsm/shaders/ToonShader.js +13 -5
  226. package/examples/jsm/shaders/VerticalBlurShader.js +2 -0
  227. package/examples/jsm/shaders/VignetteShader.js +2 -0
  228. package/examples/jsm/shaders/WaterRefractionShader.js +5 -2
  229. package/examples/jsm/utils/BufferGeometryUtils.js +17 -1
  230. package/examples/jsm/utils/TextureUtils.js +86 -0
  231. package/examples/jsm/webxr/OculusHandPointerModel.js +34 -13
  232. package/examples/jsm/webxr/XRHandPrimitiveModel.js +1 -0
  233. package/examples/jsm/webxr/XRPlanes.js +100 -0
  234. package/package.json +3 -1
  235. package/src/Three.Legacy.js +0 -228
  236. package/src/audio/PositionalAudio.js +8 -0
  237. package/src/cameras/Camera.js +5 -0
  238. package/src/cameras/CubeCamera.js +76 -13
  239. package/src/cameras/OrthographicCamera.js +1 -1
  240. package/src/cameras/PerspectiveCamera.js +1 -1
  241. package/src/constants.js +13 -1
  242. package/src/core/BufferAttribute.js +3 -25
  243. package/src/core/BufferGeometry.js +1 -8
  244. package/src/core/Object3D.js +1 -1
  245. package/src/extras/core/Curve.js +1 -1
  246. package/src/loaders/CubeTextureLoader.js +2 -0
  247. package/src/loaders/Loader.js +2 -0
  248. package/src/loaders/MaterialLoader.js +5 -0
  249. package/src/loaders/ObjectLoader.js +1 -0
  250. package/src/materials/Material.js +13 -1
  251. package/src/materials/MeshPhysicalMaterial.js +32 -6
  252. package/src/math/Color.js +16 -11
  253. package/src/math/Frustum.js +16 -2
  254. package/src/math/MathUtils.js +16 -0
  255. package/src/math/Matrix3.js +26 -6
  256. package/src/math/Matrix4.js +74 -19
  257. package/src/objects/InstancedMesh.js +3 -0
  258. package/src/objects/Mesh.js +14 -10
  259. package/src/objects/Skeleton.js +1 -3
  260. package/src/objects/SkinnedMesh.js +36 -8
  261. package/src/renderers/WebGLRenderer.js +126 -21
  262. package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
  263. package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
  264. package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +6 -0
  265. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -0
  266. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +26 -3
  267. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +9 -1
  268. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +26 -0
  269. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -2
  270. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +10 -2
  271. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +1 -1
  272. package/src/renderers/shaders/ShaderChunk/{output_fragment.glsl.js → opaque_fragment.glsl.js} +1 -2
  273. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  274. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +3 -3
  275. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +10 -5
  276. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +6 -1
  277. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +7 -1
  278. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +6 -1
  279. package/src/renderers/shaders/ShaderChunk.js +10 -6
  280. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  281. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -1
  282. package/src/renderers/shaders/ShaderLib/cube.glsl.js +1 -1
  283. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  284. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  285. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -1
  286. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -2
  287. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +4 -2
  288. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +4 -2
  289. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +4 -2
  290. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +4 -2
  291. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +12 -2
  292. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +4 -2
  293. package/src/renderers/shaders/ShaderLib/points.glsl.js +4 -2
  294. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  295. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +4 -2
  296. package/src/renderers/shaders/ShaderLib.js +4 -1
  297. package/src/renderers/shaders/UniformsLib.js +2 -0
  298. package/src/renderers/webgl/WebGLBindingStates.js +13 -5
  299. package/src/renderers/webgl/WebGLGeometries.js +12 -0
  300. package/src/renderers/webgl/WebGLInfo.js +0 -1
  301. package/src/renderers/webgl/WebGLMaterials.js +18 -0
  302. package/src/renderers/webgl/WebGLObjects.js +23 -3
  303. package/src/renderers/webgl/WebGLProgram.js +43 -5
  304. package/src/renderers/webgl/WebGLPrograms.js +19 -7
  305. package/src/renderers/webgl/WebGLTextures.js +19 -1
  306. package/src/renderers/webvr/WebVRManager.js +12 -0
  307. package/src/renderers/webxr/WebXRManager.js +39 -99
  308. package/src/scenes/Scene.js +0 -14
  309. package/src/textures/DepthTexture.js +22 -0
  310. package/src/textures/FramebufferTexture.js +1 -3
  311. package/src/textures/Source.js +4 -0
  312. package/src/textures/Texture.js +1 -1
  313. package/examples/jsm/exporters/ColladaExporter.js +0 -725
  314. package/examples/jsm/geometries/LightningStrike.js +0 -1017
  315. package/examples/jsm/loaders/PRWMLoader.js +0 -299
  316. package/examples/jsm/nodes/core/InstanceIndexNode.js +0 -26
  317. package/examples/jsm/objects/LightningStorm.js +0 -245
  318. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -361
  319. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +0 -197
  320. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +0 -190
  321. package/examples/jsm/renderers/webgpu/WebGPUBinding.js +0 -22
  322. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +0 -270
  323. package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +0 -43
  324. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +0 -78
  325. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +0 -22
  326. package/examples/jsm/renderers/webgpu/WebGPUProperties.js +0 -44
  327. package/examples/jsm/renderers/webgpu/WebGPURenderObject.js +0 -40
  328. package/examples/jsm/renderers/webgpu/WebGPURenderObjects.js +0 -50
  329. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +0 -274
  330. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +0 -54
  331. package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +0 -75
  332. package/examples/jsm/renderers/webgpu/WebGPUSampler.js +0 -29
  333. package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +0 -20
  334. package/examples/jsm/renderers/webgpu/WebGPUTextureRenderer.js +0 -38
  335. package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +0 -18
  336. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +0 -88
  337. package/examples/jsm/shaders/ToneMapShader.js +0 -73
  338. /package/src/renderers/shaders/ShaderChunk/{encodings_fragment.glsl.js → colorspace_fragment.glsl.js} +0 -0
  339. /package/src/renderers/shaders/ShaderChunk/{encodings_pars_fragment.glsl.js → colorspace_pars_fragment.glsl.js} +0 -0
@@ -1,4 +1,5 @@
1
1
  import {
2
+ HalfFloatType,
2
3
  MeshBasicMaterial,
3
4
  NearestFilter,
4
5
  ShaderMaterial,
@@ -22,10 +23,12 @@ class AfterimagePass extends Pass {
22
23
 
23
24
  this.textureComp = new WebGLRenderTarget( window.innerWidth, window.innerHeight, {
24
25
  magFilter: NearestFilter,
26
+ type: HalfFloatType
25
27
  } );
26
28
 
27
29
  this.textureOld = new WebGLRenderTarget( window.innerWidth, window.innerHeight, {
28
30
  magFilter: NearestFilter,
31
+ type: HalfFloatType
29
32
  } );
30
33
 
31
34
  this.compFsMaterial = new ShaderMaterial( {
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  AdditiveBlending,
3
+ HalfFloatType,
3
4
  ShaderMaterial,
4
5
  UniformsUtils,
5
6
  Vector2,
@@ -16,9 +17,9 @@ class BloomPass extends Pass {
16
17
 
17
18
  // render targets
18
19
 
19
- this.renderTargetX = new WebGLRenderTarget(); // will be resized later
20
+ this.renderTargetX = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later
20
21
  this.renderTargetX.texture.name = 'BloomPass.x';
21
- this.renderTargetY = new WebGLRenderTarget(); // will be resized later
22
+ this.renderTargetY = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later
22
23
  this.renderTargetY.texture.name = 'BloomPass.y';
23
24
 
24
25
  // combine material
@@ -29,6 +30,7 @@ class BloomPass extends Pass {
29
30
 
30
31
  this.materialCombine = new ShaderMaterial( {
31
32
 
33
+ name: CombineShader.name,
32
34
  uniforms: this.combineUniforms,
33
35
  vertexShader: CombineShader.vertexShader,
34
36
  fragmentShader: CombineShader.fragmentShader,
@@ -48,6 +50,7 @@ class BloomPass extends Pass {
48
50
 
49
51
  this.materialConvolution = new ShaderMaterial( {
50
52
 
53
+ name: convolutionShader.name,
51
54
  uniforms: this.convolutionUniforms,
52
55
  vertexShader: convolutionShader.vertexShader,
53
56
  fragmentShader: convolutionShader.fragmentShader,
@@ -126,6 +129,8 @@ class BloomPass extends Pass {
126
129
 
127
130
  const CombineShader = {
128
131
 
132
+ name: 'CombineShader',
133
+
129
134
  uniforms: {
130
135
 
131
136
  'tDiffuse': { value: null },
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  Color,
3
+ HalfFloatType,
3
4
  MeshDepthMaterial,
4
5
  NearestFilter,
5
6
  NoBlending,
@@ -33,7 +34,8 @@ class BokehPass extends Pass {
33
34
 
34
35
  this.renderTargetDepth = new WebGLRenderTarget( 1, 1, { // will be resized later
35
36
  minFilter: NearestFilter,
36
- magFilter: NearestFilter
37
+ magFilter: NearestFilter,
38
+ type: HalfFloatType
37
39
  } );
38
40
 
39
41
  this.renderTargetDepth.texture.name = 'BokehPass.depth';
@@ -66,7 +68,6 @@ class BokehPass extends Pass {
66
68
  } );
67
69
 
68
70
  this.uniforms = bokehUniforms;
69
- this.needsSwap = false;
70
71
 
71
72
  this.fsQuad = new FullScreenQuad( this.materialBokeh );
72
73
 
@@ -21,6 +21,7 @@ class DotScreenPass extends Pass {
21
21
 
22
22
  this.material = new ShaderMaterial( {
23
23
 
24
+ name: shader.name,
24
25
  uniforms: this.uniforms,
25
26
  vertexShader: shader.vertexShader,
26
27
  fragmentShader: shader.fragmentShader
@@ -1,5 +1,7 @@
1
1
  import {
2
2
  Clock,
3
+ HalfFloatType,
4
+ NoBlending,
3
5
  Vector2,
4
6
  WebGLRenderTarget
5
7
  } from 'three';
@@ -22,7 +24,7 @@ class EffectComposer {
22
24
  this._width = size.width;
23
25
  this._height = size.height;
24
26
 
25
- renderTarget = new WebGLRenderTarget( this._width * this._pixelRatio, this._height * this._pixelRatio );
27
+ renderTarget = new WebGLRenderTarget( this._width * this._pixelRatio, this._height * this._pixelRatio, { type: HalfFloatType } );
26
28
  renderTarget.texture.name = 'EffectComposer.rt1';
27
29
 
28
30
  } else {
@@ -44,6 +46,7 @@ class EffectComposer {
44
46
  this.passes = [];
45
47
 
46
48
  this.copyPass = new ShaderPass( CopyShader );
49
+ this.copyPass.material.blending = NoBlending;
47
50
 
48
51
  this.clock = new Clock();
49
52
 
@@ -17,6 +17,7 @@ class FilmPass extends Pass {
17
17
 
18
18
  this.material = new ShaderMaterial( {
19
19
 
20
+ name: shader.name,
20
21
  uniforms: this.uniforms,
21
22
  vertexShader: shader.vertexShader,
22
23
  fragmentShader: shader.fragmentShader
@@ -2,6 +2,7 @@ import {
2
2
  AdditiveBlending,
3
3
  Color,
4
4
  DoubleSide,
5
+ HalfFloatType,
5
6
  Matrix4,
6
7
  MeshDepthMaterial,
7
8
  NoBlending,
@@ -54,26 +55,26 @@ class OutlinePass extends Pass {
54
55
  this.prepareMaskMaterial.side = DoubleSide;
55
56
  this.prepareMaskMaterial.fragmentShader = replaceDepthToViewZ( this.prepareMaskMaterial.fragmentShader, this.renderCamera );
56
57
 
57
- this.renderTargetDepthBuffer = new WebGLRenderTarget( this.resolution.x, this.resolution.y );
58
+ this.renderTargetDepthBuffer = new WebGLRenderTarget( this.resolution.x, this.resolution.y, { type: HalfFloatType } );
58
59
  this.renderTargetDepthBuffer.texture.name = 'OutlinePass.depth';
59
60
  this.renderTargetDepthBuffer.texture.generateMipmaps = false;
60
61
 
61
- this.renderTargetMaskDownSampleBuffer = new WebGLRenderTarget( resx, resy );
62
+ this.renderTargetMaskDownSampleBuffer = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );
62
63
  this.renderTargetMaskDownSampleBuffer.texture.name = 'OutlinePass.depthDownSample';
63
64
  this.renderTargetMaskDownSampleBuffer.texture.generateMipmaps = false;
64
65
 
65
- this.renderTargetBlurBuffer1 = new WebGLRenderTarget( resx, resy );
66
+ this.renderTargetBlurBuffer1 = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );
66
67
  this.renderTargetBlurBuffer1.texture.name = 'OutlinePass.blur1';
67
68
  this.renderTargetBlurBuffer1.texture.generateMipmaps = false;
68
- this.renderTargetBlurBuffer2 = new WebGLRenderTarget( Math.round( resx / 2 ), Math.round( resy / 2 ) );
69
+ this.renderTargetBlurBuffer2 = new WebGLRenderTarget( Math.round( resx / 2 ), Math.round( resy / 2 ), { type: HalfFloatType } );
69
70
  this.renderTargetBlurBuffer2.texture.name = 'OutlinePass.blur2';
70
71
  this.renderTargetBlurBuffer2.texture.generateMipmaps = false;
71
72
 
72
73
  this.edgeDetectionMaterial = this.getEdgeDetectionMaterial();
73
- this.renderTargetEdgeBuffer1 = new WebGLRenderTarget( resx, resy );
74
+ this.renderTargetEdgeBuffer1 = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );
74
75
  this.renderTargetEdgeBuffer1.texture.name = 'OutlinePass.edge1';
75
76
  this.renderTargetEdgeBuffer1.texture.generateMipmaps = false;
76
- this.renderTargetEdgeBuffer2 = new WebGLRenderTarget( Math.round( resx / 2 ), Math.round( resy / 2 ) );
77
+ this.renderTargetEdgeBuffer2 = new WebGLRenderTarget( Math.round( resx / 2 ), Math.round( resy / 2 ), { type: HalfFloatType } );
77
78
  this.renderTargetEdgeBuffer2.texture.name = 'OutlinePass.edge2';
78
79
  this.renderTargetEdgeBuffer2.texture.generateMipmaps = false;
79
80
 
@@ -95,7 +96,6 @@ class OutlinePass extends Pass {
95
96
  const copyShader = CopyShader;
96
97
 
97
98
  this.copyUniforms = UniformsUtils.clone( copyShader.uniforms );
98
- this.copyUniforms[ 'opacity' ].value = 1.0;
99
99
 
100
100
  this.materialCopy = new ShaderMaterial( {
101
101
  uniforms: this.copyUniforms,
@@ -103,8 +103,7 @@ class OutlinePass extends Pass {
103
103
  fragmentShader: copyShader.fragmentShader,
104
104
  blending: NoBlending,
105
105
  depthTest: false,
106
- depthWrite: false,
107
- transparent: true
106
+ depthWrite: false
108
107
  } );
109
108
 
110
109
  this.enabled = true;
@@ -0,0 +1,72 @@
1
+ import {
2
+ ShaderMaterial,
3
+ UniformsUtils,
4
+ NoToneMapping,
5
+ LinearToneMapping,
6
+ ReinhardToneMapping,
7
+ CineonToneMapping,
8
+ ACESFilmicToneMapping
9
+ } from 'three';
10
+ import { Pass, FullScreenQuad } from './Pass.js';
11
+ import { OutputShader } from '../shaders/OutputShader.js';
12
+
13
+ class OutputPass extends Pass {
14
+
15
+ constructor( toneMapping = NoToneMapping, toneMappingExposure = 1 ) {
16
+
17
+ super();
18
+
19
+ this.toneMapping = toneMapping;
20
+ this.toneMappingExposure = toneMappingExposure;
21
+
22
+ //
23
+
24
+ const shader = OutputShader;
25
+
26
+ this.uniforms = UniformsUtils.clone( shader.uniforms );
27
+
28
+ this.material = new ShaderMaterial( {
29
+ uniforms: this.uniforms,
30
+ vertexShader: shader.vertexShader,
31
+ fragmentShader: shader.fragmentShader
32
+ } );
33
+
34
+ if ( toneMapping === LinearToneMapping ) this.material.defines.LINEAR_TONE_MAPPING = '';
35
+ else if ( toneMapping === ReinhardToneMapping ) this.material.defines.REINHARD_TONE_MAPPING = '';
36
+ else if ( toneMapping === CineonToneMapping ) this.material.defines.CINEON_TONE_MAPPING = '';
37
+ else if ( toneMapping === ACESFilmicToneMapping ) this.material.defines.ACES_FILMIC_TONE_MAPPING = '';
38
+
39
+ this.fsQuad = new FullScreenQuad( this.material );
40
+
41
+ }
42
+
43
+ render( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive */ ) {
44
+
45
+ this.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
46
+ this.uniforms[ 'toneMappingExposure' ].value = this.toneMappingExposure;
47
+
48
+ if ( this.renderToScreen === true ) {
49
+
50
+ renderer.setRenderTarget( null );
51
+ this.fsQuad.render( renderer );
52
+
53
+ } else {
54
+
55
+ renderer.setRenderTarget( writeBuffer );
56
+ if ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );
57
+ this.fsQuad.render( renderer );
58
+
59
+ }
60
+
61
+ }
62
+
63
+ dispose() {
64
+
65
+ this.material.dispose();
66
+ this.fsQuad.dispose();
67
+
68
+ }
69
+
70
+ }
71
+
72
+ export { OutputPass };
@@ -5,7 +5,8 @@ import {
5
5
  Vector2,
6
6
  Vector4,
7
7
  DepthTexture,
8
- NearestFilter
8
+ NearestFilter,
9
+ HalfFloatType
9
10
  } from 'three';
10
11
  import { Pass, FullScreenQuad } from './Pass.js';
11
12
 
@@ -32,13 +33,13 @@ class RenderPixelatedPass extends Pass {
32
33
  this.beautyRenderTarget = new WebGLRenderTarget();
33
34
  this.beautyRenderTarget.texture.minFilter = NearestFilter;
34
35
  this.beautyRenderTarget.texture.magFilter = NearestFilter;
36
+ this.beautyRenderTarget.texture.type = HalfFloatType;
35
37
  this.beautyRenderTarget.depthTexture = new DepthTexture();
36
38
 
37
39
  this.normalRenderTarget = new WebGLRenderTarget();
38
40
  this.normalRenderTarget.texture.minFilter = NearestFilter;
39
41
  this.normalRenderTarget.texture.magFilter = NearestFilter;
40
-
41
-
42
+ this.normalRenderTarget.texture.type = HalfFloatType;
42
43
 
43
44
  }
44
45
 
@@ -5,6 +5,7 @@ import {
5
5
  DepthTexture,
6
6
  DstAlphaFactor,
7
7
  DstColorFactor,
8
+ HalfFloatType,
8
9
  MeshDepthMaterial,
9
10
  MeshNormalMaterial,
10
11
  NearestFilter,
@@ -62,13 +63,14 @@ class SAOPass extends Pass {
62
63
 
63
64
  this.resolution = new Vector2( resolution.x, resolution.y );
64
65
 
65
- this.saoRenderTarget = new WebGLRenderTarget( this.resolution.x, this.resolution.y );
66
+ this.saoRenderTarget = new WebGLRenderTarget( this.resolution.x, this.resolution.y, { type: HalfFloatType } );
66
67
  this.blurIntermediateRenderTarget = this.saoRenderTarget.clone();
67
68
  this.beautyRenderTarget = this.saoRenderTarget.clone();
68
69
 
69
70
  this.normalRenderTarget = new WebGLRenderTarget( this.resolution.x, this.resolution.y, {
70
71
  minFilter: NearestFilter,
71
- magFilter: NearestFilter
72
+ magFilter: NearestFilter,
73
+ type: HalfFloatType
72
74
  } );
73
75
  this.depthRenderTarget = this.normalRenderTarget.clone();
74
76
 
@@ -1,4 +1,5 @@
1
1
  import {
2
+ HalfFloatType,
2
3
  LinearFilter,
3
4
  NearestFilter,
4
5
  ShaderMaterial,
@@ -20,12 +21,14 @@ class SMAAPass extends Pass {
20
21
  // render targets
21
22
 
22
23
  this.edgesRT = new WebGLRenderTarget( width, height, {
23
- depthBuffer: false
24
+ depthBuffer: false,
25
+ type: HalfFloatType
24
26
  } );
25
27
  this.edgesRT.texture.name = 'SMAAPass.edges';
26
28
 
27
29
  this.weightsRT = new WebGLRenderTarget( width, height, {
28
- depthBuffer: false
30
+ depthBuffer: false,
31
+ type: HalfFloatType
29
32
  } );
30
33
  this.weightsRT.texture.name = 'SMAAPass.weights';
31
34
 
@@ -1,9 +1,7 @@
1
1
  import {
2
- CustomBlending,
3
- OneFactor,
4
- AddEquation,
5
- SrcAlphaFactor,
2
+ AdditiveBlending,
6
3
  Color,
4
+ HalfFloatType,
7
5
  ShaderMaterial,
8
6
  UniformsUtils,
9
7
  WebGLRenderTarget
@@ -48,14 +46,8 @@ class SSAARenderPass extends Pass {
48
46
  transparent: true,
49
47
  depthTest: false,
50
48
  depthWrite: false,
51
-
52
- // do not use AdditiveBlending because it mixes the alpha channel instead of adding
53
- blending: CustomBlending,
54
- blendEquation: AddEquation,
55
- blendDst: OneFactor,
56
- blendDstAlpha: OneFactor,
57
- blendSrc: SrcAlphaFactor,
58
- blendSrcAlpha: OneFactor
49
+ premultipliedAlpha: true,
50
+ blending: AdditiveBlending
59
51
  } );
60
52
 
61
53
  this.fsQuad = new FullScreenQuad( this.copyMaterial );
@@ -87,7 +79,7 @@ class SSAARenderPass extends Pass {
87
79
 
88
80
  if ( ! this.sampleRenderTarget ) {
89
81
 
90
- this.sampleRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height );
82
+ this.sampleRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, { type: HalfFloatType } );
91
83
  this.sampleRenderTarget.texture.name = 'SSAARenderPass.sample';
92
84
 
93
85
  }
@@ -7,6 +7,7 @@ import {
7
7
  DstAlphaFactor,
8
8
  DstColorFactor,
9
9
  FloatType,
10
+ HalfFloatType,
10
11
  MathUtils,
11
12
  MeshNormalMaterial,
12
13
  NearestFilter,
@@ -65,19 +66,20 @@ class SSAOPass extends Pass {
65
66
  depthTexture.format = DepthStencilFormat;
66
67
  depthTexture.type = UnsignedInt248Type;
67
68
 
68
- this.beautyRenderTarget = new WebGLRenderTarget( this.width, this.height );
69
+ this.beautyRenderTarget = new WebGLRenderTarget( this.width, this.height, { type: HalfFloatType } );
69
70
 
70
71
  // normal render target with depth buffer
71
72
 
72
73
  this.normalRenderTarget = new WebGLRenderTarget( this.width, this.height, {
73
74
  minFilter: NearestFilter,
74
75
  magFilter: NearestFilter,
76
+ type: HalfFloatType,
75
77
  depthTexture: depthTexture
76
78
  } );
77
79
 
78
80
  // ssao render target
79
81
 
80
- this.ssaoRenderTarget = new WebGLRenderTarget( this.width, this.height );
82
+ this.ssaoRenderTarget = new WebGLRenderTarget( this.width, this.height, { type: HalfFloatType } );
81
83
 
82
84
  this.blurRenderTarget = this.ssaoRenderTarget.clone();
83
85
 
@@ -162,6 +162,7 @@ class SSRPass extends Pass {
162
162
  this.beautyRenderTarget = new WebGLRenderTarget( this.width, this.height, {
163
163
  minFilter: NearestFilter,
164
164
  magFilter: NearestFilter,
165
+ type: HalfFloatType,
165
166
  depthTexture: depthTexture,
166
167
  depthBuffer: true
167
168
  } );
@@ -184,7 +185,8 @@ class SSRPass extends Pass {
184
185
 
185
186
  this.metalnessRenderTarget = new WebGLRenderTarget( this.width, this.height, {
186
187
  minFilter: NearestFilter,
187
- magFilter: NearestFilter
188
+ magFilter: NearestFilter,
189
+ type: HalfFloatType,
188
190
  } );
189
191
 
190
192
 
@@ -1,4 +1,6 @@
1
1
  import {
2
+ HalfFloatType,
3
+ NoBlending,
2
4
  ShaderMaterial,
3
5
  UniformsUtils,
4
6
  WebGLRenderTarget
@@ -22,7 +24,8 @@ class SavePass extends Pass {
22
24
 
23
25
  uniforms: this.uniforms,
24
26
  vertexShader: shader.vertexShader,
25
- fragmentShader: shader.fragmentShader
27
+ fragmentShader: shader.fragmentShader,
28
+ blending: NoBlending
26
29
 
27
30
  } );
28
31
 
@@ -30,7 +33,7 @@ class SavePass extends Pass {
30
33
 
31
34
  if ( this.renderTarget === undefined ) {
32
35
 
33
- this.renderTarget = new WebGLRenderTarget(); // will be resized later
36
+ this.renderTarget = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later
34
37
  this.renderTarget.texture.name = 'SavePass.rt';
35
38
 
36
39
  }
@@ -24,6 +24,7 @@ class ShaderPass extends Pass {
24
24
 
25
25
  this.material = new ShaderMaterial( {
26
26
 
27
+ name: ( shader.name !== undefined ) ? shader.name : 'unspecified',
27
28
  defines: Object.assign( {}, shader.defines ),
28
29
  uniforms: this.uniforms,
29
30
  vertexShader: shader.vertexShader,
@@ -1,4 +1,5 @@
1
1
  import {
2
+ HalfFloatType,
2
3
  WebGLRenderTarget
3
4
  } from 'three';
4
5
  import { SSAARenderPass } from './SSAARenderPass.js';
@@ -23,6 +24,7 @@ class TAARenderPass extends SSAARenderPass {
23
24
 
24
25
  this.sampleLevel = 0;
25
26
  this.accumulate = false;
27
+ this.accumulateIndex = - 1;
26
28
 
27
29
  }
28
30
 
@@ -41,14 +43,14 @@ class TAARenderPass extends SSAARenderPass {
41
43
 
42
44
  if ( this.sampleRenderTarget === undefined ) {
43
45
 
44
- this.sampleRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, this.params );
46
+ this.sampleRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, { type: HalfFloatType } );
45
47
  this.sampleRenderTarget.texture.name = 'TAARenderPass.sample';
46
48
 
47
49
  }
48
50
 
49
51
  if ( this.holdRenderTarget === undefined ) {
50
52
 
51
- this.holdRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, this.params );
53
+ this.holdRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, { type: HalfFloatType } );
52
54
  this.holdRenderTarget.texture.name = 'TAARenderPass.hold';
53
55
 
54
56
  }
@@ -64,6 +66,9 @@ class TAARenderPass extends SSAARenderPass {
64
66
  const autoClear = renderer.autoClear;
65
67
  renderer.autoClear = false;
66
68
 
69
+ renderer.getClearColor( this._oldClearColor );
70
+ const oldClearAlpha = renderer.getClearAlpha();
71
+
67
72
  const sampleWeight = 1.0 / ( jitterOffsets.length );
68
73
 
69
74
  if ( this.accumulateIndex >= 0 && this.accumulateIndex < jitterOffsets.length ) {
@@ -87,11 +92,18 @@ class TAARenderPass extends SSAARenderPass {
87
92
  }
88
93
 
89
94
  renderer.setRenderTarget( writeBuffer );
95
+ renderer.setClearColor( this.clearColor, this.clearAlpha );
90
96
  renderer.clear();
91
97
  renderer.render( this.scene, this.camera );
92
98
 
93
99
  renderer.setRenderTarget( this.sampleRenderTarget );
94
- if ( this.accumulateIndex === 0 ) renderer.clear();
100
+ if ( this.accumulateIndex === 0 ) {
101
+
102
+ renderer.setClearColor( 0x000000, 0.0 );
103
+ renderer.clear();
104
+
105
+ }
106
+
95
107
  this.fsQuad.render( renderer );
96
108
 
97
109
  this.accumulateIndex ++;
@@ -104,6 +116,7 @@ class TAARenderPass extends SSAARenderPass {
104
116
 
105
117
  }
106
118
 
119
+ renderer.setClearColor( this.clearColor, this.clearAlpha );
107
120
  const accumulationWeight = this.accumulateIndex * sampleWeight;
108
121
 
109
122
  if ( accumulationWeight > 0 ) {
@@ -121,12 +134,12 @@ class TAARenderPass extends SSAARenderPass {
121
134
  this.copyUniforms[ 'opacity' ].value = 1.0 - accumulationWeight;
122
135
  this.copyUniforms[ 'tDiffuse' ].value = this.holdRenderTarget.texture;
123
136
  renderer.setRenderTarget( writeBuffer );
124
- if ( accumulationWeight === 0 ) renderer.clear();
125
137
  this.fsQuad.render( renderer );
126
138
 
127
139
  }
128
140
 
129
141
  renderer.autoClear = autoClear;
142
+ renderer.setClearColor( this._oldClearColor, oldClearAlpha );
130
143
 
131
144
  }
132
145
 
@@ -24,7 +24,8 @@ class TexturePass extends Pass {
24
24
  vertexShader: shader.vertexShader,
25
25
  fragmentShader: shader.fragmentShader,
26
26
  depthTest: false,
27
- depthWrite: false
27
+ depthWrite: false,
28
+ premultipliedAlpha: true
28
29
 
29
30
  } );
30
31
 
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  AdditiveBlending,
3
3
  Color,
4
+ HalfFloatType,
4
5
  MeshBasicMaterial,
5
6
  ShaderMaterial,
6
7
  UniformsUtils,
@@ -42,20 +43,20 @@ class UnrealBloomPass extends Pass {
42
43
  let resx = Math.round( this.resolution.x / 2 );
43
44
  let resy = Math.round( this.resolution.y / 2 );
44
45
 
45
- this.renderTargetBright = new WebGLRenderTarget( resx, resy );
46
+ this.renderTargetBright = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );
46
47
  this.renderTargetBright.texture.name = 'UnrealBloomPass.bright';
47
48
  this.renderTargetBright.texture.generateMipmaps = false;
48
49
 
49
50
  for ( let i = 0; i < this.nMips; i ++ ) {
50
51
 
51
- const renderTargetHorizonal = new WebGLRenderTarget( resx, resy );
52
+ const renderTargetHorizonal = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );
52
53
 
53
54
  renderTargetHorizonal.texture.name = 'UnrealBloomPass.h' + i;
54
55
  renderTargetHorizonal.texture.generateMipmaps = false;
55
56
 
56
57
  this.renderTargetsHorizontal.push( renderTargetHorizonal );
57
58
 
58
- const renderTargetVertical = new WebGLRenderTarget( resx, resy );
59
+ const renderTargetVertical = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );
59
60
 
60
61
  renderTargetVertical.texture.name = 'UnrealBloomPass.v' + i;
61
62
  renderTargetVertical.texture.generateMipmaps = false;
@@ -79,11 +80,11 @@ class UnrealBloomPass extends Pass {
79
80
  this.materialHighPassFilter = new ShaderMaterial( {
80
81
  uniforms: this.highPassUniforms,
81
82
  vertexShader: highPassShader.vertexShader,
82
- fragmentShader: highPassShader.fragmentShader,
83
- defines: {}
83
+ fragmentShader: highPassShader.fragmentShader
84
84
  } );
85
85
 
86
- // Gaussian Blur Materials
86
+ // gaussian blur materials
87
+
87
88
  this.separableBlurMaterials = [];
88
89
  const kernelSizeArray = [ 3, 5, 7, 9, 11 ];
89
90
  resx = Math.round( this.resolution.x / 2 );
@@ -101,7 +102,8 @@ class UnrealBloomPass extends Pass {
101
102
 
102
103
  }
103
104
 
104
- // Composite material
105
+ // composite material
106
+
105
107
  this.compositeMaterial = this.getCompositeMaterial( this.nMips );
106
108
  this.compositeMaterial.uniforms[ 'blurTexture1' ].value = this.renderTargetsVertical[ 0 ].texture;
107
109
  this.compositeMaterial.uniforms[ 'blurTexture2' ].value = this.renderTargetsVertical[ 1 ].texture;
@@ -110,21 +112,19 @@ class UnrealBloomPass extends Pass {
110
112
  this.compositeMaterial.uniforms[ 'blurTexture5' ].value = this.renderTargetsVertical[ 4 ].texture;
111
113
  this.compositeMaterial.uniforms[ 'bloomStrength' ].value = strength;
112
114
  this.compositeMaterial.uniforms[ 'bloomRadius' ].value = 0.1;
113
- this.compositeMaterial.needsUpdate = true;
114
115
 
115
116
  const bloomFactors = [ 1.0, 0.8, 0.6, 0.4, 0.2 ];
116
117
  this.compositeMaterial.uniforms[ 'bloomFactors' ].value = bloomFactors;
117
118
  this.bloomTintColors = [ new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ) ];
118
119
  this.compositeMaterial.uniforms[ 'bloomTintColors' ].value = this.bloomTintColors;
119
120
 
120
- // copy material
121
+ // blend material
121
122
 
122
123
  const copyShader = CopyShader;
123
124
 
124
125
  this.copyUniforms = UniformsUtils.clone( copyShader.uniforms );
125
- this.copyUniforms[ 'opacity' ].value = 1.0;
126
126
 
127
- this.materialCopy = new ShaderMaterial( {
127
+ this.blendMaterial = new ShaderMaterial( {
128
128
  uniforms: this.copyUniforms,
129
129
  vertexShader: copyShader.vertexShader,
130
130
  fragmentShader: copyShader.fragmentShader,
@@ -171,7 +171,7 @@ class UnrealBloomPass extends Pass {
171
171
  }
172
172
 
173
173
  this.compositeMaterial.dispose();
174
- this.materialCopy.dispose();
174
+ this.blendMaterial.dispose();
175
175
  this.basic.dispose();
176
176
 
177
177
  //
@@ -272,7 +272,7 @@ class UnrealBloomPass extends Pass {
272
272
 
273
273
  // Blend it additively over the input texture
274
274
 
275
- this.fsQuad.material = this.materialCopy;
275
+ this.fsQuad.material = this.blendMaterial;
276
276
  this.copyUniforms[ 'tDiffuse' ].value = this.renderTargetsHorizontal[ 0 ].texture;
277
277
 
278
278
  if ( maskActive ) renderer.state.buffers.stencil.setTest( true );
@@ -1,4 +1,4 @@
1
- class WebGPUAnimation {
1
+ class Animation {
2
2
 
3
3
  constructor() {
4
4
 
@@ -55,4 +55,4 @@ class WebGPUAnimation {
55
55
 
56
56
  }
57
57
 
58
- export default WebGPUAnimation;
58
+ export default Animation;