super-three 0.157.1 → 0.160.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 (303) hide show
  1. package/README.md +6 -4
  2. package/build/three.cjs +3100 -1537
  3. package/build/three.js +3100 -1537
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +3093 -1538
  6. package/build/three.module.min.js +1 -1
  7. package/examples/jsm/Addons.js +291 -0
  8. package/examples/jsm/controls/FlyControls.js +26 -0
  9. package/examples/jsm/controls/OrbitControls.js +62 -41
  10. package/examples/jsm/controls/TransformControls.js +27 -11
  11. package/examples/jsm/csm/CSMShader.js +53 -48
  12. package/examples/jsm/exporters/GLTFExporter.js +151 -3
  13. package/examples/jsm/exporters/USDZExporter.js +27 -19
  14. package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
  15. package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
  16. package/examples/jsm/helpers/TextureHelper.js +237 -0
  17. package/examples/jsm/interactive/HTMLMesh.js +9 -2
  18. package/examples/jsm/libs/lottie_canvas.module.js +6 -1
  19. package/examples/jsm/libs/opentype.module.js +13 -75
  20. package/examples/jsm/libs/surfaceNet.js +201 -0
  21. package/examples/jsm/lines/LineMaterial.js +16 -33
  22. package/examples/jsm/loaders/ColladaLoader.js +0 -6
  23. package/examples/jsm/loaders/DRACOLoader.js +4 -3
  24. package/examples/jsm/loaders/FBXLoader.js +294 -124
  25. package/examples/jsm/loaders/GLTFLoader.js +83 -6
  26. package/examples/jsm/loaders/LUTImageLoader.js +162 -0
  27. package/examples/jsm/loaders/MaterialXLoader.js +73 -54
  28. package/examples/jsm/loaders/NRRDLoader.js +0 -13
  29. package/examples/jsm/loaders/SVGLoader.js +4 -4
  30. package/examples/jsm/loaders/USDZLoader.js +3 -17
  31. package/examples/jsm/loaders/lwo/IFFParser.js +89 -93
  32. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  33. package/examples/jsm/math/Capsule.js +0 -55
  34. package/examples/jsm/math/Octree.js +85 -7
  35. package/examples/jsm/misc/Timer.js +119 -0
  36. package/examples/jsm/misc/TubePainter.js +3 -6
  37. package/examples/jsm/modifiers/CurveModifier.js +20 -2
  38. package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
  39. package/examples/jsm/modifiers/TessellateModifier.js +3 -3
  40. package/examples/jsm/nodes/Nodes.js +16 -12
  41. package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
  42. package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
  43. package/examples/jsm/nodes/accessors/InstanceNode.js +3 -3
  44. package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
  45. package/examples/jsm/nodes/accessors/MaterialNode.js +68 -31
  46. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
  47. package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
  48. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
  49. package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
  50. package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
  51. package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
  52. package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
  53. package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
  54. package/examples/jsm/nodes/accessors/TextureNode.js +123 -37
  55. package/examples/jsm/nodes/code/CodeNode.js +3 -3
  56. package/examples/jsm/nodes/code/FunctionNode.js +1 -1
  57. package/examples/jsm/nodes/core/AssignNode.js +72 -0
  58. package/examples/jsm/nodes/core/AttributeNode.js +7 -1
  59. package/examples/jsm/nodes/core/CacheNode.js +4 -1
  60. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  61. package/examples/jsm/nodes/core/LightingModel.js +3 -1
  62. package/examples/jsm/nodes/core/Node.js +13 -15
  63. package/examples/jsm/nodes/core/NodeBuilder.js +209 -42
  64. package/examples/jsm/nodes/core/NodeFrame.js +10 -8
  65. package/examples/jsm/nodes/core/NodeUniform.js +12 -0
  66. package/examples/jsm/nodes/core/NodeUtils.js +7 -9
  67. package/examples/jsm/nodes/core/OutputStructNode.js +4 -4
  68. package/examples/jsm/nodes/core/ParameterNode.js +33 -0
  69. package/examples/jsm/nodes/core/PropertyNode.js +15 -6
  70. package/examples/jsm/nodes/core/StackNode.js +7 -17
  71. package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
  72. package/examples/jsm/nodes/core/TempNode.js +1 -1
  73. package/examples/jsm/nodes/core/UniformGroup.js +13 -0
  74. package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
  75. package/examples/jsm/nodes/core/UniformNode.js +17 -0
  76. package/examples/jsm/nodes/core/VarNode.js +7 -34
  77. package/examples/jsm/nodes/core/VaryingNode.js +3 -7
  78. package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
  79. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
  80. package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
  81. package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
  82. package/examples/jsm/nodes/display/PassNode.js +182 -0
  83. package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
  84. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
  85. package/examples/jsm/nodes/display/ViewportNode.js +17 -10
  86. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +20 -6
  87. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -7
  88. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +8 -3
  89. package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +8 -0
  90. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -0
  91. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +93 -43
  92. package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -2
  93. package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
  94. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +55 -6
  95. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
  96. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -18
  97. package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
  98. package/examples/jsm/nodes/lighting/LightsNode.js +80 -20
  99. package/examples/jsm/nodes/lighting/PointLightNode.js +1 -1
  100. package/examples/jsm/nodes/lighting/SpotLightNode.js +1 -1
  101. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -0
  102. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +76 -77
  103. package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
  104. package/examples/jsm/nodes/materials/Materials.js +1 -0
  105. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
  106. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +3 -3
  107. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
  108. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -20
  109. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +6 -6
  110. package/examples/jsm/nodes/materials/NodeMaterial.js +82 -60
  111. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
  112. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  113. package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
  114. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
  115. package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
  116. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
  117. package/examples/jsm/nodes/math/MathNode.js +2 -0
  118. package/examples/jsm/nodes/math/OperatorNode.js +24 -27
  119. package/examples/jsm/nodes/shadernode/ShaderNode.js +158 -10
  120. package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
  121. package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
  122. package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
  123. package/examples/jsm/nodes/utils/JoinNode.js +11 -1
  124. package/examples/jsm/nodes/utils/LoopNode.js +36 -24
  125. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  126. package/examples/jsm/nodes/utils/SplitNode.js +10 -2
  127. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
  128. package/examples/jsm/objects/InstancedPoints.js +21 -0
  129. package/examples/jsm/objects/Lensflare.js +20 -0
  130. package/examples/jsm/objects/QuadMesh.js +60 -0
  131. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -0
  132. package/examples/jsm/objects/Refractor.js +3 -0
  133. package/examples/jsm/objects/Sky.js +5 -3
  134. package/examples/jsm/objects/Water.js +5 -2
  135. package/examples/jsm/objects/Water2.js +3 -0
  136. package/examples/jsm/physics/AmmoPhysics.js +21 -0
  137. package/examples/jsm/physics/RapierPhysics.js +21 -0
  138. package/examples/jsm/postprocessing/BokehPass.js +3 -2
  139. package/examples/jsm/postprocessing/GTAOPass.js +572 -0
  140. package/examples/jsm/postprocessing/LUTPass.js +2 -1
  141. package/examples/jsm/postprocessing/OutputPass.js +3 -0
  142. package/examples/jsm/postprocessing/Pass.js +14 -3
  143. package/examples/jsm/postprocessing/SAOPass.js +0 -1
  144. package/examples/jsm/postprocessing/SMAAPass.js +0 -2
  145. package/examples/jsm/postprocessing/TAARenderPass.js +1 -2
  146. package/examples/jsm/renderers/CSS3DRenderer.js +3 -9
  147. package/examples/jsm/renderers/SVGRenderer.js +9 -6
  148. package/examples/jsm/renderers/common/Animation.js +10 -21
  149. package/examples/jsm/renderers/common/Backend.js +19 -3
  150. package/examples/jsm/renderers/common/Background.js +20 -22
  151. package/examples/jsm/renderers/common/Bindings.js +31 -22
  152. package/examples/jsm/renderers/common/ChainMap.js +3 -3
  153. package/examples/jsm/renderers/common/Color4.js +37 -0
  154. package/examples/jsm/renderers/common/Geometries.js +4 -4
  155. package/examples/jsm/renderers/common/Info.js +12 -2
  156. package/examples/jsm/renderers/common/Pipelines.js +3 -51
  157. package/examples/jsm/renderers/common/PostProcessing.js +25 -0
  158. package/examples/jsm/renderers/common/RenderContext.js +1 -1
  159. package/examples/jsm/renderers/common/RenderContexts.js +1 -1
  160. package/examples/jsm/renderers/common/RenderObject.js +21 -2
  161. package/examples/jsm/renderers/common/RenderObjects.js +5 -3
  162. package/examples/jsm/renderers/common/Renderer.js +137 -37
  163. package/examples/jsm/renderers/common/StorageTexture.js +1 -0
  164. package/examples/jsm/renderers/common/Textures.js +8 -37
  165. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
  166. package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
  167. package/examples/jsm/renderers/common/nodes/Nodes.js +121 -19
  168. package/examples/jsm/renderers/webgl/WebGLBackend.js +366 -67
  169. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +183 -38
  170. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +92 -5
  171. package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
  172. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
  173. package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
  174. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
  175. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
  176. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  177. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
  178. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
  179. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +188 -137
  180. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
  181. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +241 -90
  182. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
  183. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
  184. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
  185. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
  186. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +2 -0
  187. package/examples/jsm/shaders/AfterimageShader.js +2 -0
  188. package/examples/jsm/shaders/BasicShader.js +2 -0
  189. package/examples/jsm/shaders/BlendShader.js +2 -0
  190. package/examples/jsm/shaders/BokehShader.js +2 -0
  191. package/examples/jsm/shaders/BokehShader2.js +4 -0
  192. package/examples/jsm/shaders/BrightnessContrastShader.js +2 -0
  193. package/examples/jsm/shaders/ColorCorrectionShader.js +2 -0
  194. package/examples/jsm/shaders/DOFMipMapShader.js +2 -0
  195. package/examples/jsm/shaders/DepthLimitedBlurShader.js +5 -0
  196. package/examples/jsm/shaders/FXAAShader.js +135 -133
  197. package/examples/jsm/shaders/FilmShader.js +1 -1
  198. package/examples/jsm/shaders/FocusShader.js +2 -0
  199. package/examples/jsm/shaders/FreiChenShader.js +2 -0
  200. package/examples/jsm/shaders/GTAOShader.js +424 -0
  201. package/examples/jsm/shaders/GodRaysShader.js +8 -0
  202. package/examples/jsm/shaders/HalftoneShader.js +2 -0
  203. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +2 -0
  204. package/examples/jsm/shaders/HueSaturationShader.js +2 -0
  205. package/examples/jsm/shaders/KaleidoShader.js +2 -0
  206. package/examples/jsm/shaders/LuminosityHighPassShader.js +2 -0
  207. package/examples/jsm/shaders/LuminosityShader.js +2 -0
  208. package/examples/jsm/shaders/MMDToonShader.js +2 -0
  209. package/examples/jsm/shaders/MirrorShader.js +2 -0
  210. package/examples/jsm/shaders/NormalMapShader.js +2 -0
  211. package/examples/jsm/shaders/OutputShader.js +8 -5
  212. package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
  213. package/examples/jsm/shaders/SAOShader.js +7 -3
  214. package/examples/jsm/shaders/SMAAShader.js +6 -0
  215. package/examples/jsm/shaders/SSAOShader.js +8 -3
  216. package/examples/jsm/shaders/SSRShader.js +6 -0
  217. package/examples/jsm/shaders/SobelOperatorShader.js +2 -0
  218. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +2 -0
  219. package/examples/jsm/shaders/TechnicolorShader.js +2 -0
  220. package/examples/jsm/shaders/TriangleBlurShader.js +2 -0
  221. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -0
  222. package/examples/jsm/shaders/VelocityShader.js +2 -0
  223. package/examples/jsm/shaders/VerticalTiltShiftShader.js +2 -0
  224. package/examples/jsm/shaders/WaterRefractionShader.js +2 -0
  225. package/examples/jsm/transpiler/AST.js +270 -0
  226. package/examples/jsm/transpiler/GLSLDecoder.js +941 -0
  227. package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
  228. package/examples/jsm/transpiler/TSLEncoder.js +715 -0
  229. package/examples/jsm/transpiler/Transpiler.js +18 -0
  230. package/examples/jsm/utils/SortUtils.js +158 -0
  231. package/examples/jsm/utils/TextureUtils.js +33 -21
  232. package/examples/jsm/webxr/ARButton.js +14 -0
  233. package/examples/jsm/webxr/VRButton.js +24 -9
  234. package/examples/jsm/webxr/XRButton.js +27 -11
  235. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  236. package/package.json +8 -6
  237. package/src/Three.js +1 -0
  238. package/src/constants.js +8 -1
  239. package/src/core/BufferAttribute.js +21 -2
  240. package/src/core/InterleavedBuffer.js +21 -1
  241. package/src/core/Object3D.js +60 -12
  242. package/src/core/UniformsGroup.js +7 -1
  243. package/src/extras/PMREMGenerator.js +7 -1
  244. package/src/extras/curves/LineCurve3.js +4 -0
  245. package/src/loaders/AudioLoader.js +1 -1
  246. package/src/loaders/BufferGeometryLoader.js +0 -7
  247. package/src/loaders/ImageBitmapLoader.js +25 -1
  248. package/src/loaders/MaterialLoader.js +10 -2
  249. package/src/loaders/ObjectLoader.js +49 -0
  250. package/src/materials/Material.js +27 -13
  251. package/src/materials/ShaderMaterial.js +2 -1
  252. package/src/math/Box3.js +35 -18
  253. package/src/math/ColorManagement.js +0 -16
  254. package/src/math/Quaternion.js +5 -4
  255. package/src/math/Sphere.js +2 -0
  256. package/src/math/Triangle.js +17 -5
  257. package/src/math/Vector3.js +11 -12
  258. package/src/objects/BatchedMesh.js +1020 -0
  259. package/src/objects/Skeleton.js +1 -3
  260. package/src/objects/SkinnedMesh.js +6 -7
  261. package/src/renderers/WebGL3DRenderTarget.js +2 -2
  262. package/src/renderers/WebGLArrayRenderTarget.js +2 -2
  263. package/src/renderers/WebGLRenderer.js +165 -43
  264. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
  265. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
  266. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
  267. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
  268. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
  269. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
  270. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
  271. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
  272. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
  273. package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
  274. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
  275. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
  276. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
  277. package/src/renderers/shaders/ShaderChunk.js +4 -0
  278. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  279. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  280. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
  281. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
  282. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
  283. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
  284. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
  285. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -2
  286. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
  287. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
  288. package/src/renderers/webgl/WebGLAttributes.js +39 -5
  289. package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
  290. package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
  291. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  292. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
  293. package/src/renderers/webgl/WebGLLights.js +11 -2
  294. package/src/renderers/webgl/WebGLProgram.js +100 -51
  295. package/src/renderers/webgl/WebGLPrograms.js +8 -0
  296. package/src/renderers/webgl/WebGLShadowMap.js +35 -0
  297. package/src/renderers/webgl/WebGLState.js +25 -4
  298. package/src/renderers/webgl/WebGLTextures.js +7 -11
  299. package/src/renderers/webgl/WebGLUniforms.js +11 -1
  300. package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
  301. package/src/renderers/webxr/WebXRManager.js +16 -0
  302. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
  303. package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
@@ -0,0 +1,572 @@
1
+ import {
2
+ AddEquation,
3
+ Color,
4
+ CustomBlending,
5
+ DataTexture,
6
+ DepthTexture,
7
+ DepthStencilFormat,
8
+ DstAlphaFactor,
9
+ DstColorFactor,
10
+ HalfFloatType,
11
+ MeshNormalMaterial,
12
+ NearestFilter,
13
+ NoBlending,
14
+ RepeatWrapping,
15
+ RGBAFormat,
16
+ ShaderMaterial,
17
+ UniformsUtils,
18
+ UnsignedByteType,
19
+ UnsignedInt248Type,
20
+ WebGLRenderTarget,
21
+ ZeroFactor
22
+ } from 'three';
23
+ import { Pass, FullScreenQuad } from './Pass.js';
24
+ import { generateMagicSquareNoise, GTAOShader, GTAODepthShader, GTAOBlendShader } from '../shaders/GTAOShader.js';
25
+ import { generatePdSamplePointInitializer, PoissonDenoiseShader } from '../shaders/PoissonDenoiseShader.js';
26
+ import { CopyShader } from '../shaders/CopyShader.js';
27
+ import { SimplexNoise } from '../math/SimplexNoise.js';
28
+
29
+ class GTAOPass extends Pass {
30
+
31
+ constructor( scene, camera, width, height, parameters, aoParameters, pdParameters ) {
32
+
33
+ super();
34
+
35
+ this.width = ( width !== undefined ) ? width : 512;
36
+ this.height = ( height !== undefined ) ? height : 512;
37
+ this.clear = true;
38
+ this.camera = camera;
39
+ this.scene = scene;
40
+ this.output = 0;
41
+ this._renderGBuffer = true;
42
+ this._visibilityCache = new Map();
43
+ this.blendIntensity = 1.;
44
+
45
+ this.pdRings = 2.;
46
+ this.pdRadiusExponent = 2.;
47
+ this.pdSamples = 16;
48
+
49
+ this.gtaoNoiseTexture = generateMagicSquareNoise();
50
+ this.pdNoiseTexture = this.generateNoise();
51
+
52
+ this.gtaoRenderTarget = new WebGLRenderTarget( this.width, this.height, { type: HalfFloatType } );
53
+ this.pdRenderTarget = this.gtaoRenderTarget.clone();
54
+
55
+ this.gtaoMaterial = new ShaderMaterial( {
56
+ defines: Object.assign( {}, GTAOShader.defines ),
57
+ uniforms: UniformsUtils.clone( GTAOShader.uniforms ),
58
+ vertexShader: GTAOShader.vertexShader,
59
+ fragmentShader: GTAOShader.fragmentShader,
60
+ blending: NoBlending,
61
+ depthTest: false,
62
+ depthWrite: false,
63
+ } );
64
+ this.gtaoMaterial.definesPERSPECTIVE_CAMERA = this.camera.isPerspectiveCamera ? 1 : 0;
65
+ this.gtaoMaterial.uniforms.tNoise.value = this.gtaoNoiseTexture;
66
+ this.gtaoMaterial.uniforms.resolution.value.set( this.width, this.height );
67
+ this.gtaoMaterial.uniforms.cameraNear.value = this.camera.near;
68
+ this.gtaoMaterial.uniforms.cameraFar.value = this.camera.far;
69
+
70
+ this.normalMaterial = new MeshNormalMaterial();
71
+ this.normalMaterial.blending = NoBlending;
72
+
73
+ this.pdMaterial = new ShaderMaterial( {
74
+ defines: Object.assign( {}, PoissonDenoiseShader.defines ),
75
+ uniforms: UniformsUtils.clone( PoissonDenoiseShader.uniforms ),
76
+ vertexShader: PoissonDenoiseShader.vertexShader,
77
+ fragmentShader: PoissonDenoiseShader.fragmentShader,
78
+ depthTest: false,
79
+ depthWrite: false,
80
+ } );
81
+ this.pdMaterial.uniforms.tDiffuse.value = this.gtaoRenderTarget.texture;
82
+ this.pdMaterial.uniforms.tNoise.value = this.pdNoiseTexture;
83
+ this.pdMaterial.uniforms.resolution.value.set( this.width, this.height );
84
+ this.pdMaterial.uniforms.lumaPhi.value = 10;
85
+ this.pdMaterial.uniforms.depthPhi.value = 2;
86
+ this.pdMaterial.uniforms.normalPhi.value = 3;
87
+ this.pdMaterial.uniforms.radius.value = 8;
88
+
89
+ this.depthRenderMaterial = new ShaderMaterial( {
90
+ defines: Object.assign( {}, GTAODepthShader.defines ),
91
+ uniforms: UniformsUtils.clone( GTAODepthShader.uniforms ),
92
+ vertexShader: GTAODepthShader.vertexShader,
93
+ fragmentShader: GTAODepthShader.fragmentShader,
94
+ blending: NoBlending
95
+ } );
96
+ this.depthRenderMaterial.uniforms.cameraNear.value = this.camera.near;
97
+ this.depthRenderMaterial.uniforms.cameraFar.value = this.camera.far;
98
+
99
+ this.copyMaterial = new ShaderMaterial( {
100
+ uniforms: UniformsUtils.clone( CopyShader.uniforms ),
101
+ vertexShader: CopyShader.vertexShader,
102
+ fragmentShader: CopyShader.fragmentShader,
103
+ transparent: true,
104
+ depthTest: false,
105
+ depthWrite: false,
106
+ blendSrc: DstColorFactor,
107
+ blendDst: ZeroFactor,
108
+ blendEquation: AddEquation,
109
+ blendSrcAlpha: DstAlphaFactor,
110
+ blendDstAlpha: ZeroFactor,
111
+ blendEquationAlpha: AddEquation
112
+ } );
113
+
114
+ this.blendMaterial = new ShaderMaterial( {
115
+ uniforms: UniformsUtils.clone( GTAOBlendShader.uniforms ),
116
+ vertexShader: GTAOBlendShader.vertexShader,
117
+ fragmentShader: GTAOBlendShader.fragmentShader,
118
+ transparent: true,
119
+ depthTest: false,
120
+ depthWrite: false,
121
+ blending: CustomBlending,
122
+ blendSrc: DstColorFactor,
123
+ blendDst: ZeroFactor,
124
+ blendEquation: AddEquation,
125
+ blendSrcAlpha: DstAlphaFactor,
126
+ blendDstAlpha: ZeroFactor,
127
+ blendEquationAlpha: AddEquation
128
+ } );
129
+
130
+ this.fsQuad = new FullScreenQuad( null );
131
+
132
+ this.originalClearColor = new Color();
133
+
134
+ this.setGBuffer( parameters ? parameters.depthTexture : undefined, parameters ? parameters.normalTexture : undefined );
135
+
136
+ if ( aoParameters !== undefined ) {
137
+
138
+ this.updateGtaoMaterial( aoParameters );
139
+
140
+ }
141
+
142
+ if ( pdParameters !== undefined ) {
143
+
144
+ this.updatePdMaterial( pdParameters );
145
+
146
+ }
147
+
148
+ }
149
+
150
+ dispose() {
151
+
152
+ this.gtaoNoiseTexture.dispose();
153
+ this.pdNoiseTexture.dispose();
154
+ this.normalRenderTarget.dispose();
155
+ this.gtaoRenderTarget.dispose();
156
+ this.pdRenderTarget.dispose();
157
+ this.normalMaterial.dispose();
158
+ this.pdMaterial.dispose();
159
+ this.copyMaterial.dispose();
160
+ this.depthRenderMaterial.dispose();
161
+ this.fsQuad.dispose();
162
+
163
+ }
164
+
165
+ setGBuffer( depthTexture, normalTexture ) {
166
+
167
+ if ( depthTexture !== undefined ) {
168
+
169
+ this.depthTexture = depthTexture;
170
+ this.normalTexture = normalTexture;
171
+ this._renderGBuffer = false;
172
+
173
+ } else {
174
+
175
+ this.depthTexture = new DepthTexture();
176
+ this.depthTexture.format = DepthStencilFormat;
177
+ this.depthTexture.type = UnsignedInt248Type;
178
+ this.normalRenderTarget = new WebGLRenderTarget( this.width, this.height, {
179
+ minFilter: NearestFilter,
180
+ magFilter: NearestFilter,
181
+ type: HalfFloatType,
182
+ depthTexture: this.depthTexture
183
+ } );
184
+ this.normalTexture = this.normalRenderTarget.texture;
185
+ this._renderGBuffer = true;
186
+
187
+ }
188
+
189
+ const normalVectorType = ( this.normalTexture ) ? 1 : 0;
190
+ const depthValueSource = ( this.depthTexture === this.normalTexture ) ? 'w' : 'x';
191
+
192
+ this.gtaoMaterial.defines.NORMAL_VECTOR_TYPE = normalVectorType;
193
+ this.gtaoMaterial.defines.DEPTH_SWIZZLING = depthValueSource;
194
+ this.gtaoMaterial.uniforms.tNormal.value = this.normalTexture;
195
+ this.gtaoMaterial.uniforms.tDepth.value = this.depthTexture;
196
+
197
+ this.pdMaterial.defines.NORMAL_VECTOR_TYPE = normalVectorType;
198
+ this.pdMaterial.defines.DEPTH_SWIZZLING = depthValueSource;
199
+ this.pdMaterial.uniforms.tNormal.value = this.normalTexture;
200
+ this.pdMaterial.uniforms.tDepth.value = this.depthTexture;
201
+
202
+ this.depthRenderMaterial.uniforms.tDepth.value = this.normalRenderTarget.depthTexture;
203
+
204
+ }
205
+
206
+ setSceneClipBox( box ) {
207
+
208
+ if ( box ) {
209
+
210
+ this.gtaoMaterial.needsUpdate = this.gtaoMaterial.defines.SCENE_CLIP_BOX !== 1;
211
+ this.gtaoMaterial.defines.SCENE_CLIP_BOX = 1;
212
+ this.gtaoMaterial.uniforms.sceneBoxMin.value.copy( box.min );
213
+ this.gtaoMaterial.uniforms.sceneBoxMax.value.copy( box.max );
214
+
215
+ } else {
216
+
217
+ this.gtaoMaterial.needsUpdate = this.gtaoMaterial.defines.SCENE_CLIP_BOX === 0;
218
+ this.gtaoMaterial.defines.SCENE_CLIP_BOX = 0;
219
+
220
+ }
221
+
222
+ }
223
+
224
+ updateGtaoMaterial( parameters ) {
225
+
226
+ if ( parameters.radius !== undefined ) {
227
+
228
+ this.gtaoMaterial.uniforms.radius.value = parameters.radius;
229
+
230
+ }
231
+
232
+ if ( parameters.distanceExponent !== undefined ) {
233
+
234
+ this.gtaoMaterial.uniforms.distanceExponent.value = parameters.distanceExponent;
235
+
236
+ }
237
+
238
+ if ( parameters.thickness !== undefined ) {
239
+
240
+ this.gtaoMaterial.uniforms.thickness.value = parameters.thickness;
241
+
242
+ }
243
+
244
+ if ( parameters.distanceFallOff !== undefined ) {
245
+
246
+ this.gtaoMaterial.uniforms.distanceFallOff.value = parameters.distanceFallOff;
247
+ this.gtaoMaterial.needsUpdate = true;
248
+
249
+ }
250
+
251
+ if ( parameters.scale !== undefined ) {
252
+
253
+ this.gtaoMaterial.uniforms.scale.value = parameters.scale;
254
+
255
+ }
256
+
257
+ if ( parameters.samples !== undefined && parameters.samples !== this.gtaoMaterial.defines.SAMPLES ) {
258
+
259
+ this.gtaoMaterial.defines.SAMPLES = parameters.samples;
260
+ this.gtaoMaterial.needsUpdate = true;
261
+
262
+ }
263
+
264
+ if ( parameters.screenSpaceRadius !== undefined && ( parameters.screenSpaceRadius ? 1 : 0 ) !== this.gtaoMaterial.defines.SCREEN_SPACE_RADIUS ) {
265
+
266
+ this.gtaoMaterial.defines.SCREEN_SPACE_RADIUS = parameters.screenSpaceRadius ? 1 : 0;
267
+ this.gtaoMaterial.needsUpdate = true;
268
+
269
+ }
270
+
271
+ }
272
+
273
+ updatePdMaterial( parameters ) {
274
+
275
+ let updateShader = false;
276
+
277
+ if ( parameters.lumaPhi !== undefined ) {
278
+
279
+ this.pdMaterial.uniforms.lumaPhi.value = parameters.lumaPhi;
280
+
281
+ }
282
+
283
+ if ( parameters.depthPhi !== undefined ) {
284
+
285
+ this.pdMaterial.uniforms.depthPhi.value = parameters.depthPhi;
286
+
287
+ }
288
+
289
+ if ( parameters.normalPhi !== undefined ) {
290
+
291
+ this.pdMaterial.uniforms.normalPhi.value = parameters.normalPhi;
292
+
293
+ }
294
+
295
+ if ( parameters.radius !== undefined && parameters.radius !== this.radius ) {
296
+
297
+ this.pdMaterial.uniforms.radius.value = parameters.radius;
298
+
299
+ }
300
+
301
+ if ( parameters.radiusExponent !== undefined && parameters.radiusExponent !== this.pdRadiusExponent ) {
302
+
303
+ this.pdRadiusExponent = parameters.radiusExponent;
304
+ updateShader = true;
305
+
306
+ }
307
+
308
+ if ( parameters.rings !== undefined && parameters.rings !== this.pdRings ) {
309
+
310
+ this.pdRings = parameters.rings;
311
+ updateShader = true;
312
+
313
+ }
314
+
315
+ if ( parameters.samples !== undefined && parameters.samples !== this.pdSamples ) {
316
+
317
+ this.pdSamples = parameters.samples;
318
+ updateShader = true;
319
+
320
+ }
321
+
322
+ if ( updateShader ) {
323
+
324
+ this.pdMaterial.defines.SAMPLES = this.pdSamples;
325
+ this.pdMaterial.defines.SAMPLE_VECTORS = generatePdSamplePointInitializer( this.pdSamples, this.pdRings, this.pdRadiusExponent );
326
+ this.pdMaterial.needsUpdate = true;
327
+
328
+ }
329
+
330
+ }
331
+
332
+ render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
333
+
334
+ // render normals and depth (honor only meshes, points and lines do not contribute to AO)
335
+
336
+ if ( this._renderGBuffer ) {
337
+
338
+ this.overrideVisibility();
339
+ this.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );
340
+ this.restoreVisibility();
341
+
342
+ }
343
+
344
+ // render AO
345
+
346
+ this.gtaoMaterial.uniforms.cameraNear.value = this.camera.near;
347
+ this.gtaoMaterial.uniforms.cameraFar.value = this.camera.far;
348
+ this.gtaoMaterial.uniforms.cameraProjectionMatrix.value.copy( this.camera.projectionMatrix );
349
+ this.gtaoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );
350
+ this.gtaoMaterial.uniforms.cameraWorldMatrix.value.copy( this.camera.matrixWorld );
351
+ this.renderPass( renderer, this.gtaoMaterial, this.gtaoRenderTarget, 0xffffff, 1.0 );
352
+
353
+ // render poisson denoise
354
+
355
+ this.pdMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );
356
+ this.renderPass( renderer, this.pdMaterial, this.pdRenderTarget, 0xffffff, 1.0 );
357
+
358
+ // output result to screen
359
+
360
+ switch ( this.output ) {
361
+
362
+ case GTAOPass.OUTPUT.Diffuse:
363
+
364
+ this.copyMaterial.uniforms.tDiffuse.value = readBuffer.texture;
365
+ this.copyMaterial.blending = NoBlending;
366
+ this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
367
+
368
+ break;
369
+
370
+ case GTAOPass.OUTPUT.AO:
371
+
372
+ this.copyMaterial.uniforms.tDiffuse.value = this.gtaoRenderTarget.texture;
373
+ this.copyMaterial.blending = NoBlending;
374
+ this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
375
+
376
+ break;
377
+
378
+ case GTAOPass.OUTPUT.Denoise:
379
+
380
+ this.copyMaterial.uniforms.tDiffuse.value = this.pdRenderTarget.texture;
381
+ this.copyMaterial.blending = NoBlending;
382
+ this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
383
+
384
+ break;
385
+
386
+ case GTAOPass.OUTPUT.Depth:
387
+
388
+ this.depthRenderMaterial.uniforms.cameraNear.value = this.camera.near;
389
+ this.depthRenderMaterial.uniforms.cameraFar.value = this.camera.far;
390
+ this.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );
391
+
392
+ break;
393
+
394
+ case GTAOPass.OUTPUT.Normal:
395
+
396
+ this.copyMaterial.uniforms.tDiffuse.value = this.normalRenderTarget.texture;
397
+ this.copyMaterial.blending = NoBlending;
398
+ this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
399
+
400
+ break;
401
+
402
+ case GTAOPass.OUTPUT.Default:
403
+
404
+ this.copyMaterial.uniforms.tDiffuse.value = readBuffer.texture;
405
+ this.copyMaterial.blending = NoBlending;
406
+ this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
407
+
408
+ this.blendMaterial.uniforms.intensity.value = this.blendIntensity;
409
+ this.blendMaterial.uniforms.tDiffuse.value = this.pdRenderTarget.texture;
410
+ this.renderPass( renderer, this.blendMaterial, this.renderToScreen ? null : writeBuffer );
411
+
412
+ break;
413
+
414
+ default:
415
+ console.warn( 'THREE.GTAOPass: Unknown output type.' );
416
+
417
+ }
418
+
419
+ }
420
+
421
+ renderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {
422
+
423
+ // save original state
424
+ renderer.getClearColor( this.originalClearColor );
425
+ const originalClearAlpha = renderer.getClearAlpha();
426
+ const originalAutoClear = renderer.autoClear;
427
+
428
+ renderer.setRenderTarget( renderTarget );
429
+
430
+ // setup pass state
431
+ renderer.autoClear = false;
432
+ if ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {
433
+
434
+ renderer.setClearColor( clearColor );
435
+ renderer.setClearAlpha( clearAlpha || 0.0 );
436
+ renderer.clear();
437
+
438
+ }
439
+
440
+ this.fsQuad.material = passMaterial;
441
+ this.fsQuad.render( renderer );
442
+
443
+ // restore original state
444
+ renderer.autoClear = originalAutoClear;
445
+ renderer.setClearColor( this.originalClearColor );
446
+ renderer.setClearAlpha( originalClearAlpha );
447
+
448
+ }
449
+
450
+ renderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {
451
+
452
+ renderer.getClearColor( this.originalClearColor );
453
+ const originalClearAlpha = renderer.getClearAlpha();
454
+ const originalAutoClear = renderer.autoClear;
455
+
456
+ renderer.setRenderTarget( renderTarget );
457
+ renderer.autoClear = false;
458
+
459
+ clearColor = overrideMaterial.clearColor || clearColor;
460
+ clearAlpha = overrideMaterial.clearAlpha || clearAlpha;
461
+
462
+ if ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {
463
+
464
+ renderer.setClearColor( clearColor );
465
+ renderer.setClearAlpha( clearAlpha || 0.0 );
466
+ renderer.clear();
467
+
468
+ }
469
+
470
+ this.scene.overrideMaterial = overrideMaterial;
471
+ renderer.render( this.scene, this.camera );
472
+ this.scene.overrideMaterial = null;
473
+
474
+ renderer.autoClear = originalAutoClear;
475
+ renderer.setClearColor( this.originalClearColor );
476
+ renderer.setClearAlpha( originalClearAlpha );
477
+
478
+ }
479
+
480
+ setSize( width, height ) {
481
+
482
+ this.width = width;
483
+ this.height = height;
484
+
485
+ this.gtaoRenderTarget.setSize( width, height );
486
+ this.normalRenderTarget.setSize( width, height );
487
+ this.pdRenderTarget.setSize( width, height );
488
+
489
+ this.gtaoMaterial.uniforms.resolution.value.set( width, height );
490
+ this.gtaoMaterial.uniforms.cameraProjectionMatrix.value.copy( this.camera.projectionMatrix );
491
+ this.gtaoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );
492
+
493
+ this.pdMaterial.uniforms.resolution.value.set( width, height );
494
+ this.pdMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );
495
+
496
+ }
497
+
498
+ overrideVisibility() {
499
+
500
+ const scene = this.scene;
501
+ const cache = this._visibilityCache;
502
+
503
+ scene.traverse( function ( object ) {
504
+
505
+ cache.set( object, object.visible );
506
+
507
+ if ( object.isPoints || object.isLine ) object.visible = false;
508
+
509
+ } );
510
+
511
+ }
512
+
513
+ restoreVisibility() {
514
+
515
+ const scene = this.scene;
516
+ const cache = this._visibilityCache;
517
+
518
+ scene.traverse( function ( object ) {
519
+
520
+ const visible = cache.get( object );
521
+ object.visible = visible;
522
+
523
+ } );
524
+
525
+ cache.clear();
526
+
527
+ }
528
+
529
+ generateNoise( size = 64 ) {
530
+
531
+ const simplex = new SimplexNoise();
532
+
533
+ const arraySize = size * size * 4;
534
+ const data = new Uint8Array( arraySize );
535
+
536
+ for ( let i = 0; i < size; i ++ ) {
537
+
538
+ for ( let j = 0; j < size; j ++ ) {
539
+
540
+ const x = i;
541
+ const y = j;
542
+
543
+ data[ ( i * size + j ) * 4 ] = ( simplex.noise( x, y ) * 0.5 + 0.5 ) * 255;
544
+ data[ ( i * size + j ) * 4 + 1 ] = ( simplex.noise( x + size, y ) * 0.5 + 0.5 ) * 255;
545
+ data[ ( i * size + j ) * 4 + 2 ] = ( simplex.noise( x, y + size ) * 0.5 + 0.5 ) * 255;
546
+ data[ ( i * size + j ) * 4 + 3 ] = ( simplex.noise( x + size, y + size ) * 0.5 + 0.5 ) * 255;
547
+
548
+ }
549
+
550
+ }
551
+
552
+ const noiseTexture = new DataTexture( data, size, size, RGBAFormat, UnsignedByteType );
553
+ noiseTexture.wrapS = RepeatWrapping;
554
+ noiseTexture.wrapT = RepeatWrapping;
555
+ noiseTexture.needsUpdate = true;
556
+
557
+ return noiseTexture;
558
+
559
+ }
560
+
561
+ }
562
+
563
+ GTAOPass.OUTPUT = {
564
+ 'Default': 0,
565
+ 'Diffuse': 1,
566
+ 'Depth': 2,
567
+ 'Normal': 3,
568
+ 'AO': 4,
569
+ 'Denoise': 5,
570
+ };
571
+
572
+ export { GTAOPass };
@@ -2,6 +2,8 @@ import { ShaderPass } from './ShaderPass.js';
2
2
 
3
3
  const LUTShader = {
4
4
 
5
+ name: 'LUTShader',
6
+
5
7
  defines: {
6
8
  USE_3DTEXTURE: 1,
7
9
  },
@@ -29,7 +31,6 @@ const LUTShader = {
29
31
 
30
32
  `,
31
33
 
32
-
33
34
  fragmentShader: /* glsl */`
34
35
 
35
36
  uniform float lutSize;
@@ -5,6 +5,7 @@ import {
5
5
  LinearToneMapping,
6
6
  ReinhardToneMapping,
7
7
  CineonToneMapping,
8
+ AgXToneMapping,
8
9
  ACESFilmicToneMapping,
9
10
  SRGBTransfer
10
11
  } from 'three';
@@ -24,6 +25,7 @@ class OutputPass extends Pass {
24
25
  this.uniforms = UniformsUtils.clone( shader.uniforms );
25
26
 
26
27
  this.material = new RawShaderMaterial( {
28
+ name: shader.name,
27
29
  uniforms: this.uniforms,
28
30
  vertexShader: shader.vertexShader,
29
31
  fragmentShader: shader.fragmentShader
@@ -58,6 +60,7 @@ class OutputPass extends Pass {
58
60
  else if ( this._toneMapping === ReinhardToneMapping ) this.material.defines.REINHARD_TONE_MAPPING = '';
59
61
  else if ( this._toneMapping === CineonToneMapping ) this.material.defines.CINEON_TONE_MAPPING = '';
60
62
  else if ( this._toneMapping === ACESFilmicToneMapping ) this.material.defines.ACES_FILMIC_TONE_MAPPING = '';
63
+ else if ( this._toneMapping === AgXToneMapping ) this.material.defines.AGX_TONE_MAPPING = '';
61
64
 
62
65
  this.material.needsUpdate = true;
63
66
 
@@ -43,9 +43,20 @@ const _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
43
43
 
44
44
  // https://github.com/mrdoob/three.js/pull/21358
45
45
 
46
- const _geometry = new BufferGeometry();
47
- _geometry.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );
48
- _geometry.setAttribute( 'uv', new Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );
46
+ class FullscreenTriangleGeometry extends BufferGeometry {
47
+
48
+ constructor() {
49
+
50
+ super();
51
+
52
+ this.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );
53
+ this.setAttribute( 'uv', new Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );
54
+
55
+ }
56
+
57
+ }
58
+
59
+ const _geometry = new FullscreenTriangleGeometry();
49
60
 
50
61
  class FullScreenQuad {
51
62
 
@@ -314,7 +314,6 @@ class SAOPass extends Pass {
314
314
  this.blurIntermediateRenderTarget.dispose();
315
315
  this.normalRenderTarget.dispose();
316
316
 
317
- this.depthMaterial.dispose();
318
317
  this.normalMaterial.dispose();
319
318
  this.saoMaterial.dispose();
320
319
  this.vBlurMaterial.dispose();
@@ -110,8 +110,6 @@ class SMAAPass extends Pass {
110
110
  fragmentShader: SMAABlendShader.fragmentShader
111
111
  } );
112
112
 
113
- this.needsSwap = false;
114
-
115
113
  this.fsQuad = new FullScreenQuad( null );
116
114
 
117
115
  }
@@ -147,8 +147,7 @@ class TAARenderPass extends SSAARenderPass {
147
147
 
148
148
  super.dispose();
149
149
 
150
- if ( this.sampleRenderTarget !== undefined ) this.sampleRenderTarget.dispose();
151
- if ( this.holdRenderTarget !== undefined ) this.holdRenderTarget.dispose();
150
+ if ( this.holdRenderTarget ) this.holdRenderTarget.dispose();
152
151
 
153
152
  }
154
153
 
@@ -95,7 +95,7 @@ class CSS3DRenderer {
95
95
  let _widthHalf, _heightHalf;
96
96
 
97
97
  const cache = {
98
- camera: { fov: 0, style: '' },
98
+ camera: { style: '' },
99
99
  objects: new WeakMap()
100
100
  };
101
101
 
@@ -129,13 +129,6 @@ class CSS3DRenderer {
129
129
 
130
130
  const fov = camera.projectionMatrix.elements[ 5 ] * _heightHalf;
131
131
 
132
- if ( cache.camera.fov !== fov ) {
133
-
134
- viewElement.style.perspective = camera.isPerspectiveCamera ? fov + 'px' : '';
135
- cache.camera.fov = fov;
136
-
137
- }
138
-
139
132
  if ( camera.view && camera.view.enabled ) {
140
133
 
141
134
  // view offset
@@ -166,8 +159,9 @@ class CSS3DRenderer {
166
159
  const cameraCSSMatrix = camera.isOrthographicCamera ?
167
160
  `scale( ${ scaleByViewOffset } )` + 'scale(' + fov + ')' + 'translate(' + epsilon( tx ) + 'px,' + epsilon( ty ) + 'px)' + getCameraCSSMatrix( camera.matrixWorldInverse ) :
168
161
  `scale( ${ scaleByViewOffset } )` + 'translateZ(' + fov + 'px)' + getCameraCSSMatrix( camera.matrixWorldInverse );
162
+ const perspective = camera.isPerspectiveCamera ? 'perspective(' + fov + 'px) ' : '';
169
163
 
170
- const style = cameraCSSMatrix +
164
+ const style = perspective + cameraCSSMatrix +
171
165
  'translate(' + _widthHalf + 'px,' + _heightHalf + 'px)';
172
166
 
173
167
  if ( cache.camera.style !== style ) {