super-three 0.164.0 → 0.167.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 (416) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +1273 -503
  3. package/build/three.module.js +1269 -504
  4. package/build/three.module.min.js +1 -1
  5. package/build/three.webgpu.js +76086 -0
  6. package/build/three.webgpu.min.js +6 -0
  7. package/examples/jsm/Addons.js +2 -1
  8. package/examples/jsm/controls/TransformControls.js +1 -1
  9. package/examples/jsm/csm/CSMShader.js +4 -4
  10. package/examples/jsm/environments/RoomEnvironment.js +1 -5
  11. package/examples/jsm/exporters/GLTFExporter.js +8 -4
  12. package/examples/jsm/exporters/USDZExporter.js +6 -4
  13. package/examples/jsm/geometries/TeapotGeometry.js +1 -1
  14. package/examples/jsm/helpers/ViewHelper.js +75 -61
  15. package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
  16. package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
  17. package/examples/jsm/lines/LineMaterial.js +1 -15
  18. package/examples/jsm/lines/LineSegments2.js +15 -0
  19. package/examples/jsm/lines/Wireframe.js +16 -1
  20. package/examples/jsm/lines/webgpu/Line2.js +20 -0
  21. package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
  22. package/examples/jsm/loaders/DRACOLoader.js +1 -1
  23. package/examples/jsm/loaders/FBXLoader.js +47 -58
  24. package/examples/jsm/loaders/GLTFLoader.js +12 -4
  25. package/examples/jsm/loaders/LDrawLoader.js +3 -2
  26. package/examples/jsm/loaders/MMDLoader.js +31 -12
  27. package/examples/jsm/loaders/MaterialXLoader.js +2 -9
  28. package/examples/jsm/loaders/USDZLoader.js +124 -76
  29. package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
  30. package/examples/jsm/loaders/VTKLoader.js +76 -3
  31. package/examples/jsm/misc/GPUComputationRenderer.js +9 -19
  32. package/examples/jsm/modifiers/CurveModifier.js +11 -9
  33. package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
  34. package/examples/jsm/objects/InstancedPoints.js +2 -2
  35. package/examples/jsm/objects/Lensflare.js +2 -2
  36. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  37. package/examples/jsm/postprocessing/RenderTransitionPass.js +13 -38
  38. package/examples/jsm/postprocessing/SSAOPass.js +6 -9
  39. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
  40. package/examples/jsm/renderers/CSS2DRenderer.js +25 -5
  41. package/examples/jsm/renderers/CSS3DRenderer.js +24 -3
  42. package/examples/jsm/shaders/ColorifyShader.js +1 -2
  43. package/examples/jsm/shaders/FXAAShader.js +0 -2
  44. package/examples/jsm/shaders/GTAOShader.js +1 -1
  45. package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
  46. package/examples/jsm/transpiler/GLSLDecoder.js +46 -4
  47. package/examples/jsm/transpiler/TSLEncoder.js +17 -15
  48. package/examples/jsm/utils/BufferGeometryUtils.js +18 -16
  49. package/examples/jsm/utils/GPUStatsPanel.js +2 -0
  50. package/examples/jsm/utils/SortUtils.js +8 -5
  51. package/package.json +9 -7
  52. package/src/Three.WebGPU.js +194 -0
  53. package/src/Three.js +2 -0
  54. package/src/animation/tracks/BooleanKeyframeTrack.js +10 -1
  55. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -2
  56. package/src/animation/tracks/StringKeyframeTrack.js +10 -1
  57. package/src/constants.js +4 -1
  58. package/src/core/Object3D.js +24 -22
  59. package/src/core/Raycaster.js +6 -2
  60. package/src/extras/TextureUtils.js +210 -0
  61. package/src/lights/Light.js +1 -0
  62. package/src/lights/LightShadow.js +5 -0
  63. package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
  64. package/src/loaders/FileLoader.js +4 -0
  65. package/src/loaders/LoaderUtils.js +3 -1
  66. package/src/loaders/ObjectLoader.js +34 -2
  67. package/src/materials/Material.js +13 -4
  68. package/src/math/Box2.js +4 -4
  69. package/src/math/Box3.js +6 -6
  70. package/src/math/ColorManagement.js +10 -0
  71. package/src/math/Matrix2.js +54 -0
  72. package/src/math/Vector4.js +13 -0
  73. package/{examples/jsm → src}/nodes/Nodes.js +39 -20
  74. package/{examples/jsm → src}/nodes/accessors/BatchNode.js +28 -10
  75. package/src/nodes/accessors/BitangentNode.js +13 -0
  76. package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +36 -1
  77. package/{examples/jsm → src}/nodes/accessors/BufferNode.js +6 -0
  78. package/src/nodes/accessors/CameraNode.js +19 -0
  79. package/{examples/jsm → src}/nodes/accessors/CubeTextureNode.js +22 -5
  80. package/src/nodes/accessors/InstanceNode.js +140 -0
  81. package/{examples/jsm → src}/nodes/accessors/MaterialNode.js +24 -2
  82. package/{examples/jsm → src}/nodes/accessors/ModelNode.js +4 -0
  83. package/{examples/jsm → src}/nodes/accessors/MorphNode.js +24 -20
  84. package/src/nodes/accessors/NormalNode.js +14 -0
  85. package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +1 -1
  86. package/src/nodes/accessors/PositionNode.js +10 -0
  87. package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +7 -1
  88. package/src/nodes/accessors/ReflectVectorNode.js +10 -0
  89. package/{examples/jsm → src}/nodes/accessors/StorageBufferNode.js +50 -1
  90. package/{examples/jsm/nodes/accessors/TextureStoreNode.js → src/nodes/accessors/StorageTextureNode.js} +28 -6
  91. package/src/nodes/accessors/TangentNode.js +23 -0
  92. package/src/nodes/accessors/Texture3DNode.js +100 -0
  93. package/{examples/jsm → src}/nodes/accessors/TextureNode.js +55 -18
  94. package/src/nodes/accessors/UVNode.js +3 -0
  95. package/{examples/jsm → src}/nodes/accessors/UniformsNode.js +7 -1
  96. package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +2 -1
  97. package/{examples/jsm → src}/nodes/code/ScriptableNode.js +14 -0
  98. package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +2 -1
  99. package/{examples/jsm → src}/nodes/core/AttributeNode.js +34 -8
  100. package/{examples/jsm → src}/nodes/core/CacheNode.js +7 -10
  101. package/{examples/jsm → src}/nodes/core/ContextNode.js +6 -0
  102. package/{examples/jsm → src}/nodes/core/IndexNode.js +6 -0
  103. package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
  104. package/src/nodes/core/MRTNode.js +76 -0
  105. package/{examples/jsm → src}/nodes/core/Node.js +33 -14
  106. package/{examples/jsm → src}/nodes/core/NodeBuilder.js +194 -45
  107. package/src/nodes/core/NodeCache.js +36 -0
  108. package/{examples/jsm → src}/nodes/core/NodeFrame.js +42 -0
  109. package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
  110. package/{examples/jsm → src}/nodes/core/NodeKeywords.js +1 -1
  111. package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
  112. package/{examples/jsm → src}/nodes/core/NodeUtils.js +6 -1
  113. package/{examples/jsm → src}/nodes/core/OutputStructNode.js +1 -5
  114. package/{examples/jsm → src}/nodes/core/PropertyNode.js +2 -0
  115. package/{examples/jsm → src}/nodes/core/TempNode.js +2 -2
  116. package/{examples/jsm → src}/nodes/core/UniformGroupNode.js +20 -0
  117. package/{examples/jsm → src}/nodes/core/UniformNode.js +10 -1
  118. package/{examples/jsm → src}/nodes/core/VarNode.js +2 -6
  119. package/src/nodes/core/VaryingNode.js +104 -0
  120. package/{examples/jsm → src}/nodes/display/AfterImageNode.js +24 -20
  121. package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +18 -21
  122. package/src/nodes/display/BloomNode.js +333 -0
  123. package/{examples/jsm → src}/nodes/display/ColorAdjustmentNode.js +7 -2
  124. package/{examples/jsm → src}/nodes/display/ColorSpaceNode.js +1 -1
  125. package/src/nodes/display/DenoiseNode.js +198 -0
  126. package/src/nodes/display/DepthOfFieldNode.js +119 -0
  127. package/src/nodes/display/DotScreenNode.js +75 -0
  128. package/src/nodes/display/FXAANode.js +327 -0
  129. package/src/nodes/display/FilmNode.js +52 -0
  130. package/{examples/jsm → src}/nodes/display/FrontFacingNode.js +2 -1
  131. package/src/nodes/display/GTAONode.js +324 -0
  132. package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +34 -17
  133. package/src/nodes/display/Lut3DNode.js +53 -0
  134. package/{examples/jsm → src}/nodes/display/NormalMapNode.js +1 -1
  135. package/src/nodes/display/PassNode.js +291 -0
  136. package/src/nodes/display/PixelationPassNode.js +201 -0
  137. package/src/nodes/display/RGBShiftNode.js +49 -0
  138. package/src/nodes/display/RenderOutputNode.js +56 -0
  139. package/src/nodes/display/SobelOperatorNode.js +121 -0
  140. package/{examples/jsm → src}/nodes/display/ToneMappingNode.js +44 -5
  141. package/src/nodes/display/TransitionNode.js +76 -0
  142. package/{examples/jsm → src}/nodes/display/ViewportDepthNode.js +39 -16
  143. package/{examples/jsm → src}/nodes/display/ViewportDepthTextureNode.js +2 -1
  144. package/{examples/jsm → src}/nodes/display/ViewportNode.js +3 -2
  145. package/{examples/jsm → src}/nodes/display/ViewportSharedTextureNode.js +2 -1
  146. package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +5 -2
  147. package/src/nodes/functions/BSDF/LTC.js +131 -0
  148. package/src/nodes/functions/BasicLightingModel.js +78 -0
  149. package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +5 -3
  150. package/{examples/jsm → src}/nodes/functions/PhysicalLightingModel.js +103 -18
  151. package/src/nodes/functions/ToonLightingModel.js +51 -0
  152. package/{examples/jsm → src}/nodes/geometry/RangeNode.js +19 -6
  153. package/{examples/jsm → src}/nodes/lighting/AONode.js +1 -4
  154. package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +1 -1
  155. package/src/nodes/lighting/AnalyticLightNode.js +333 -0
  156. package/src/nodes/lighting/BasicEnvironmentNode.js +26 -0
  157. package/src/nodes/lighting/BasicLightMapNode.js +29 -0
  158. package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +2 -3
  159. package/{examples/jsm → src}/nodes/lighting/EnvironmentNode.js +5 -4
  160. package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +2 -1
  161. package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +1 -1
  162. package/{examples/jsm → src}/nodes/lighting/LightingNode.js +2 -0
  163. package/{examples/jsm → src}/nodes/lighting/LightsNode.js +18 -3
  164. package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +2 -3
  165. package/src/nodes/lighting/RectAreaLightNode.js +97 -0
  166. package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +2 -3
  167. package/{examples/jsm → src}/nodes/loaders/NodeLoader.js +3 -1
  168. package/{examples/jsm → src}/nodes/loaders/NodeMaterialLoader.js +2 -1
  169. package/{examples/jsm → src}/nodes/loaders/NodeObjectLoader.js +2 -1
  170. package/{examples/jsm → src}/nodes/materials/InstancedPointsNodeMaterial.js +3 -3
  171. package/{examples/jsm → src}/nodes/materials/Line2NodeMaterial.js +4 -4
  172. package/{examples/jsm → src}/nodes/materials/LineBasicNodeMaterial.js +3 -3
  173. package/{examples/jsm → src}/nodes/materials/LineDashedNodeMaterial.js +4 -3
  174. package/{examples/jsm → src}/nodes/materials/Materials.js +3 -0
  175. package/src/nodes/materials/MeshBasicNodeMaterial.js +73 -0
  176. package/{examples/jsm → src}/nodes/materials/MeshLambertNodeMaterial.js +12 -3
  177. package/src/nodes/materials/MeshMatcapNodeMaterial.js +53 -0
  178. package/{examples/jsm → src}/nodes/materials/MeshNormalNodeMaterial.js +5 -3
  179. package/{examples/jsm → src}/nodes/materials/MeshPhongNodeMaterial.js +11 -3
  180. package/{examples/jsm → src}/nodes/materials/MeshPhysicalNodeMaterial.js +26 -8
  181. package/{examples/jsm → src}/nodes/materials/MeshStandardNodeMaterial.js +14 -3
  182. package/src/nodes/materials/MeshToonNodeMaterial.js +34 -0
  183. package/{examples/jsm → src}/nodes/materials/NodeMaterial.js +97 -24
  184. package/{examples/jsm → src}/nodes/materials/PointsNodeMaterial.js +3 -3
  185. package/{examples/jsm → src}/nodes/materials/ShadowNodeMaterial.js +3 -3
  186. package/{examples/jsm → src}/nodes/materials/SpriteNodeMaterial.js +3 -3
  187. package/src/nodes/materials/VolumeNodeMaterial.js +106 -0
  188. package/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +9 -17
  189. package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +474 -577
  190. package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +2 -8
  191. package/{examples/jsm → src}/nodes/math/CondNode.js +13 -6
  192. package/{examples/jsm → src}/nodes/math/HashNode.js +2 -2
  193. package/{examples/jsm → src}/nodes/math/MathNode.js +14 -1
  194. package/{examples/jsm → src}/nodes/math/OperatorNode.js +6 -6
  195. package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
  196. package/{examples/jsm → src}/nodes/pmrem/PMREMNode.js +2 -1
  197. package/{examples/jsm → src}/nodes/shadernode/ShaderNode.js +57 -33
  198. package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +1 -1
  199. package/{examples/jsm → src}/nodes/utils/DiscardNode.js +1 -0
  200. package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +2 -0
  201. package/{examples/jsm → src}/nodes/utils/LoopNode.js +7 -6
  202. package/{examples/jsm → src}/nodes/utils/MatcapUVNode.js +1 -1
  203. package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +8 -2
  204. package/src/nodes/utils/RTTNode.js +130 -0
  205. package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +9 -1
  206. package/{examples/jsm → src}/nodes/utils/TimerNode.js +1 -1
  207. package/src/objects/BatchedMesh.js +232 -162
  208. package/src/objects/InstancedMesh.js +1 -1
  209. package/src/renderers/WebGLRenderer.js +312 -68
  210. package/{examples/jsm → src}/renderers/common/Attributes.js +4 -1
  211. package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
  212. package/{examples/jsm → src}/renderers/common/Background.js +9 -3
  213. package/src/renderers/common/BindGroup.js +16 -0
  214. package/{examples/jsm → src}/renderers/common/Bindings.js +54 -22
  215. package/src/renderers/common/ChainMap.js +59 -0
  216. package/{examples/jsm → src}/renderers/common/ClippingContext.js +8 -6
  217. package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
  218. package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +7 -1
  219. package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
  220. package/{examples/jsm → src}/renderers/common/Info.js +34 -6
  221. package/{examples/jsm → src}/renderers/common/Pipelines.js +2 -2
  222. package/src/renderers/common/PostProcessing.js +87 -0
  223. package/{examples/jsm/objects → src/renderers/common}/QuadMesh.js +6 -3
  224. package/src/renderers/common/RenderBundle.js +18 -0
  225. package/src/renderers/common/RenderBundles.js +38 -0
  226. package/{examples/jsm → src}/renderers/common/RenderContext.js +1 -1
  227. package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
  228. package/{examples/jsm → src}/renderers/common/RenderList.js +9 -0
  229. package/{examples/jsm → src}/renderers/common/RenderObject.js +50 -11
  230. package/{examples/jsm → src}/renderers/common/Renderer.js +220 -40
  231. package/{examples/jsm → src}/renderers/common/SampledTexture.js +2 -2
  232. package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
  233. package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
  234. package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
  235. package/{examples/jsm → src}/renderers/common/Textures.js +6 -2
  236. package/{examples/jsm → src}/renderers/common/Uniform.js +10 -5
  237. package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
  238. package/{examples/jsm → src}/renderers/common/extras/PMREMGenerator.js +13 -12
  239. package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
  240. package/{examples/jsm → src}/renderers/common/nodes/NodeSampledTexture.js +19 -4
  241. package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +8 -1
  242. package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
  243. package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
  244. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
  245. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
  246. package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +37 -16
  247. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +31 -1
  248. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  249. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
  250. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
  251. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
  252. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
  253. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  254. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
  255. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
  256. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +1 -1
  257. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
  258. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +10 -31
  259. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
  260. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  261. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -4
  262. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  263. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  264. package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
  265. package/src/renderers/shaders/UniformsLib.js +3 -0
  266. package/src/renderers/webgl/WebGLAttributes.js +2 -2
  267. package/src/renderers/webgl/WebGLBackground.js +6 -0
  268. package/src/renderers/webgl/WebGLBufferRenderer.js +6 -19
  269. package/src/renderers/webgl/WebGLExtensions.js +3 -1
  270. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +6 -18
  271. package/src/renderers/webgl/WebGLLights.js +15 -12
  272. package/src/renderers/webgl/WebGLMaterials.js +1 -5
  273. package/src/renderers/webgl/WebGLMorphtargets.js +1 -2
  274. package/src/renderers/webgl/WebGLProgram.js +28 -31
  275. package/src/renderers/webgl/WebGLPrograms.js +15 -15
  276. package/src/renderers/webgl/WebGLRenderStates.js +2 -2
  277. package/src/renderers/webgl/WebGLTextures.js +100 -70
  278. package/src/renderers/webgl/WebGLUniforms.js +12 -2
  279. package/src/renderers/webgl/WebGLUniformsGroups.js +7 -7
  280. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +156 -54
  281. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +188 -41
  282. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +2 -2
  283. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +1 -0
  284. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
  285. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +1 -1
  286. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +126 -7
  287. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +1 -1
  288. package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +212 -78
  289. package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +2 -2
  290. package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +245 -49
  291. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
  292. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  293. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +30 -14
  294. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +9 -1
  295. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +74 -24
  296. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +101 -25
  297. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +24 -3
  298. package/src/renderers/webxr/WebXRDepthSensing.js +9 -3
  299. package/src/renderers/webxr/WebXRManager.js +12 -2
  300. package/src/textures/CompressedArrayTexture.js +14 -0
  301. package/src/textures/DataArrayTexture.js +14 -0
  302. package/src/textures/DepthTexture.js +1 -3
  303. package/src/utils.js +30 -1
  304. package/examples/jsm/nodes/accessors/BitangentNode.js +0 -89
  305. package/examples/jsm/nodes/accessors/CameraNode.js +0 -119
  306. package/examples/jsm/nodes/accessors/InstanceNode.js +0 -94
  307. package/examples/jsm/nodes/accessors/NormalNode.js +0 -106
  308. package/examples/jsm/nodes/accessors/PositionNode.js +0 -104
  309. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -35
  310. package/examples/jsm/nodes/accessors/TangentNode.js +0 -109
  311. package/examples/jsm/nodes/accessors/UVNode.js +0 -47
  312. package/examples/jsm/nodes/core/NodeCache.js +0 -26
  313. package/examples/jsm/nodes/core/VaryingNode.js +0 -65
  314. package/examples/jsm/nodes/display/PassNode.js +0 -199
  315. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -255
  316. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  317. package/examples/jsm/renderers/common/ChainMap.js +0 -89
  318. package/examples/jsm/renderers/common/PostProcessing.js +0 -33
  319. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  320. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  321. /package/{examples/jsm → src}/nodes/accessors/AccessorsUtils.js +0 -0
  322. /package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +0 -0
  323. /package/{examples/jsm → src}/nodes/accessors/InstancedPointsMaterialNode.js +0 -0
  324. /package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +0 -0
  325. /package/{examples/jsm → src}/nodes/accessors/ModelViewProjectionNode.js +0 -0
  326. /package/{examples/jsm → src}/nodes/accessors/PointUVNode.js +0 -0
  327. /package/{examples/jsm → src}/nodes/accessors/RendererReferenceNode.js +0 -0
  328. /package/{examples/jsm → src}/nodes/accessors/SceneNode.js +0 -0
  329. /package/{examples/jsm → src}/nodes/accessors/SkinningNode.js +0 -0
  330. /package/{examples/jsm → src}/nodes/accessors/TextureBicubicNode.js +0 -0
  331. /package/{examples/jsm → src}/nodes/accessors/TextureSizeNode.js +0 -0
  332. /package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +0 -0
  333. /package/{examples/jsm → src}/nodes/code/CodeNode.js +0 -0
  334. /package/{examples/jsm → src}/nodes/code/ExpressionNode.js +0 -0
  335. /package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +0 -0
  336. /package/{examples/jsm → src}/nodes/code/FunctionNode.js +0 -0
  337. /package/{examples/jsm → src}/nodes/core/AssignNode.js +0 -0
  338. /package/{examples/jsm → src}/nodes/core/BypassNode.js +0 -0
  339. /package/{examples/jsm → src}/nodes/core/ConstNode.js +0 -0
  340. /package/{examples/jsm → src}/nodes/core/InputNode.js +0 -0
  341. /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
  342. /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
  343. /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
  344. /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
  345. /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
  346. /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
  347. /package/{examples/jsm → src}/nodes/core/ParameterNode.js +0 -0
  348. /package/{examples/jsm → src}/nodes/core/StackNode.js +0 -0
  349. /package/{examples/jsm → src}/nodes/core/StructTypeNode.js +0 -0
  350. /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
  351. /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
  352. /package/{examples/jsm → src}/nodes/display/BlendModeNode.js +0 -0
  353. /package/{examples/jsm → src}/nodes/display/BumpMapNode.js +0 -0
  354. /package/{examples/jsm → src}/nodes/display/PosterizeNode.js +0 -0
  355. /package/{examples/jsm → src}/nodes/fog/FogExp2Node.js +0 -0
  356. /package/{examples/jsm → src}/nodes/fog/FogNode.js +0 -0
  357. /package/{examples/jsm → src}/nodes/fog/FogRangeNode.js +0 -0
  358. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_GGX.js +0 -0
  359. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +0 -0
  360. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +0 -0
  361. /package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +0 -0
  362. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +0 -0
  363. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX_Anisotropic.js +0 -0
  364. /package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +0 -0
  365. /package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +0 -0
  366. /package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +0 -0
  367. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +0 -0
  368. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +0 -0
  369. /package/{examples/jsm → src}/nodes/functions/ShadowMaskModel.js +0 -0
  370. /package/{examples/jsm → src}/nodes/functions/material/getGeometryRoughness.js +0 -0
  371. /package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +0 -0
  372. /package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +0 -0
  373. /package/{examples/jsm → src}/nodes/lighting/IrradianceNode.js +0 -0
  374. /package/{examples/jsm → src}/nodes/lighting/LightNode.js +0 -0
  375. /package/{examples/jsm → src}/nodes/lighting/LightUtils.js +0 -0
  376. /package/{examples/jsm → src}/nodes/lighting/LightingContextNode.js +0 -0
  377. /package/{examples/jsm → src}/nodes/materials/MeshSSSNodeMaterial.js +0 -0
  378. /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
  379. /package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +0 -0
  380. /package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -0
  381. /package/{examples/jsm → src}/nodes/math/TriNoise3D.js +0 -0
  382. /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
  383. /package/{examples/jsm → src}/nodes/pmrem/PMREMUtils.js +0 -0
  384. /package/{examples/jsm → src}/nodes/procedural/CheckerNode.js +0 -0
  385. /package/{examples/jsm → src}/nodes/utils/ConvertNode.js +0 -0
  386. /package/{examples/jsm → src}/nodes/utils/EquirectUVNode.js +0 -0
  387. /package/{examples/jsm → src}/nodes/utils/JoinNode.js +0 -0
  388. /package/{examples/jsm → src}/nodes/utils/OscNode.js +0 -0
  389. /package/{examples/jsm → src}/nodes/utils/PackingNode.js +0 -0
  390. /package/{examples/jsm → src}/nodes/utils/RemapNode.js +0 -0
  391. /package/{examples/jsm → src}/nodes/utils/RotateNode.js +0 -0
  392. /package/{examples/jsm → src}/nodes/utils/RotateUVNode.js +0 -0
  393. /package/{examples/jsm → src}/nodes/utils/SetNode.js +0 -0
  394. /package/{examples/jsm → src}/nodes/utils/SplitNode.js +0 -0
  395. /package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +0 -0
  396. /package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +0 -0
  397. /package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +0 -0
  398. /package/{examples/jsm → src}/renderers/common/Animation.js +0 -0
  399. /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
  400. /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
  401. /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
  402. /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
  403. /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
  404. /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
  405. /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
  406. /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
  407. /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
  408. /package/{examples/jsm → src}/renderers/common/RenderObjects.js +0 -0
  409. /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
  410. /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
  411. /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
  412. /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
  413. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBufferRenderer.js +0 -0
  414. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
  415. /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
  416. /package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +0 -0
@@ -1,17 +1,15 @@
1
1
  import {
2
- Camera,
3
2
  ClampToEdgeWrapping,
4
3
  DataTexture,
5
4
  FloatType,
6
- Mesh,
7
5
  NearestFilter,
8
- PlaneGeometry,
9
6
  RGBAFormat,
10
- Scene,
11
7
  ShaderMaterial,
12
8
  WebGLRenderTarget
13
9
  } from 'three';
14
10
 
11
+ import { FullScreenQuad } from '../postprocessing/Pass.js';
12
+
15
13
  /**
16
14
  * GPUComputationRenderer, based on SimulationRenderer by zz85
17
15
  *
@@ -48,8 +46,8 @@ import {
48
46
  * // and fill in here the texture data...
49
47
  *
50
48
  * // Add texture variables
51
- * const velVar = gpuCompute.addVariable( "textureVelocity", fragmentShaderVel, pos0 );
52
- * const posVar = gpuCompute.addVariable( "texturePosition", fragmentShaderPos, vel0 );
49
+ * const velVar = gpuCompute.addVariable( "textureVelocity", fragmentShaderVel, vel0 );
50
+ * const posVar = gpuCompute.addVariable( "texturePosition", fragmentShaderPos, pos0 );
53
51
  *
54
52
  * // Add variable dependencies
55
53
  * gpuCompute.setVariableDependencies( velVar, [ velVar, posVar ] );
@@ -119,20 +117,13 @@ class GPUComputationRenderer {
119
117
 
120
118
  let dataType = FloatType;
121
119
 
122
- const scene = new Scene();
123
-
124
- const camera = new Camera();
125
- camera.position.z = 1;
126
-
127
120
  const passThruUniforms = {
128
121
  passThruTexture: { value: null }
129
122
  };
130
123
 
131
124
  const passThruShader = createShaderMaterial( getPassThroughFragmentShader(), passThruUniforms );
132
125
 
133
- const mesh = new Mesh( new PlaneGeometry( 2, 2 ), passThruShader );
134
- scene.add( mesh );
135
-
126
+ const quad = new FullScreenQuad( passThruShader );
136
127
 
137
128
  this.setDataType = function ( type ) {
138
129
 
@@ -284,8 +275,7 @@ class GPUComputationRenderer {
284
275
 
285
276
  this.dispose = function () {
286
277
 
287
- mesh.geometry.dispose();
288
- mesh.material.dispose();
278
+ quad.dispose();
289
279
 
290
280
  const variables = this.variables;
291
281
 
@@ -395,10 +385,10 @@ class GPUComputationRenderer {
395
385
 
396
386
  renderer.xr.enabled = false; // Avoid camera modification
397
387
  renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
398
- mesh.material = material;
388
+ quad.material = material;
399
389
  renderer.setRenderTarget( output );
400
- renderer.render( scene, camera );
401
- mesh.material = passThruShader;
390
+ quad.render( renderer );
391
+ quad.material = passThruShader;
402
392
 
403
393
  renderer.xr.enabled = currentXrEnabled;
404
394
  renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
@@ -5,12 +5,13 @@ const TEXTURE_HEIGHT = 4;
5
5
 
6
6
  import {
7
7
  DataTexture,
8
+ DataUtils,
8
9
  RGBAFormat,
9
- FloatType,
10
+ HalfFloatType,
10
11
  RepeatWrapping,
11
12
  Mesh,
12
13
  InstancedMesh,
13
- NearestFilter,
14
+ LinearFilter,
14
15
  DynamicDrawUsage,
15
16
  Matrix4
16
17
  } from 'three';
@@ -22,18 +23,19 @@ import {
22
23
  */
23
24
  export function initSplineTexture( numberOfCurves = 1 ) {
24
25
 
25
- const dataArray = new Float32Array( TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS );
26
+ const dataArray = new Uint16Array( TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS );
26
27
  const dataTexture = new DataTexture(
27
28
  dataArray,
28
29
  TEXTURE_WIDTH,
29
30
  TEXTURE_HEIGHT * numberOfCurves,
30
31
  RGBAFormat,
31
- FloatType
32
+ HalfFloatType
32
33
  );
33
34
 
34
35
  dataTexture.wrapS = RepeatWrapping;
35
36
  dataTexture.wrapY = RepeatWrapping;
36
- dataTexture.magFilter = NearestFilter;
37
+ dataTexture.magFilter = LinearFilter;
38
+ dataTexture.minFilter = LinearFilter;
37
39
  dataTexture.needsUpdate = true;
38
40
 
39
41
  return dataTexture;
@@ -81,10 +83,10 @@ function setTextureValue( texture, index, x, y, z, o ) {
81
83
  const image = texture.image;
82
84
  const { data } = image;
83
85
  const i = CHANNELS * TEXTURE_WIDTH * o; // Row Offset
84
- data[ index * CHANNELS + i + 0 ] = x;
85
- data[ index * CHANNELS + i + 1 ] = y;
86
- data[ index * CHANNELS + i + 2 ] = z;
87
- data[ index * CHANNELS + i + 3 ] = 1;
86
+ data[ index * CHANNELS + i + 0 ] = DataUtils.toHalfFloat( x );
87
+ data[ index * CHANNELS + i + 1 ] = DataUtils.toHalfFloat( y );
88
+ data[ index * CHANNELS + i + 2 ] = DataUtils.toHalfFloat( z );
89
+ data[ index * CHANNELS + i + 3 ] = DataUtils.toHalfFloat( 1 );
88
90
 
89
91
  }
90
92
 
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  BufferGeometry,
3
+ Color,
3
4
  Float32BufferAttribute,
4
5
  Vector2,
5
6
  Vector3,
@@ -81,7 +82,7 @@ class SimplifyModifier {
81
82
 
82
83
  if ( colorAttribute ) {
83
84
 
84
- col = new THREE.Color().fromBufferAttribute( colorAttribute, i );
85
+ col = new Color().fromBufferAttribute( colorAttribute, i );
85
86
 
86
87
  }
87
88
 
@@ -1,8 +1,8 @@
1
1
  import {
2
- Mesh
2
+ Mesh,
3
+ InstancedPointsNodeMaterial
3
4
  } from 'three';
4
5
  import InstancedPointsGeometry from '../geometries/InstancedPointsGeometry.js';
5
- import InstancedPointsNodeMaterial from '../nodes/materials/InstancedPointsNodeMaterial.js';
6
6
 
7
7
  class InstancedPoints extends Mesh {
8
8
 
@@ -210,7 +210,7 @@ class Lensflare extends Mesh {
210
210
 
211
211
  // save current RGB to temp texture
212
212
 
213
- renderer.copyFramebufferToTexture( screenPositionPixels, tempMap );
213
+ renderer.copyFramebufferToTexture( tempMap, screenPositionPixels );
214
214
 
215
215
  // render pink quad
216
216
 
@@ -222,7 +222,7 @@ class Lensflare extends Mesh {
222
222
 
223
223
  // copy result to occlusionMap
224
224
 
225
- renderer.copyFramebufferToTexture( screenPositionPixels, occlusionMap );
225
+ renderer.copyFramebufferToTexture( occlusionMap, screenPositionPixels );
226
226
 
227
227
  // restore graphics
228
228
 
@@ -42,7 +42,7 @@ class RenderPass extends Pass {
42
42
  if ( this.clearColor !== null ) {
43
43
 
44
44
  renderer.getClearColor( this._oldClearColor );
45
- renderer.setClearColor( this.clearColor );
45
+ renderer.setClearColor( this.clearColor, renderer.getClearAlpha() );
46
46
 
47
47
  }
48
48
 
@@ -59,51 +59,29 @@ class RenderTransitionPass extends Pass {
59
59
 
60
60
  render( renderer, writeBuffer ) {
61
61
 
62
+ renderer.setRenderTarget( this.renderTargetA );
63
+ renderer.render( this.sceneA, this.cameraA );
64
+ renderer.setRenderTarget( this.renderTargetB );
65
+ renderer.render( this.sceneB, this.cameraB );
66
+
62
67
  const uniforms = this.fsQuad.material.uniforms;
63
- const transition = uniforms.mixRatio.value;
68
+ uniforms.tDiffuse1.value = this.renderTargetA.texture;
69
+ uniforms.tDiffuse2.value = this.renderTargetB.texture;
64
70
 
65
- // Prevent render both scenes when it's not necessary
71
+ if ( this.renderToScreen ) {
66
72
 
67
- if ( transition === 0 ) {
73
+ renderer.setRenderTarget( null );
74
+ renderer.clear();
68
75
 
69
- renderer.setRenderTarget( writeBuffer );
70
- if ( this.clear ) renderer.clear();
71
- renderer.render( this.sceneB, this.cameraB );
72
-
73
- } else if ( transition === 1 ) {
76
+ } else {
74
77
 
75
78
  renderer.setRenderTarget( writeBuffer );
76
79
  if ( this.clear ) renderer.clear();
77
- renderer.render( this.sceneA, this.cameraA );
78
-
79
- } else {
80
-
81
- // When 0 < transition < 1 render transition between two scenes
82
-
83
- renderer.setRenderTarget( this.renderTargetA );
84
- renderer.render( this.sceneA, this.cameraA );
85
- renderer.setRenderTarget( this.renderTargetB );
86
- renderer.render( this.sceneB, this.cameraB );
87
-
88
- uniforms.tDiffuse1.value = this.renderTargetA.texture;
89
- uniforms.tDiffuse2.value = this.renderTargetB.texture;
90
-
91
- if ( this.renderToScreen ) {
92
-
93
- renderer.setRenderTarget( null );
94
- renderer.clear();
95
-
96
- } else {
97
-
98
- renderer.setRenderTarget( writeBuffer );
99
- if ( this.clear ) renderer.clear();
100
-
101
- }
102
-
103
- this.fsQuad.render( renderer );
104
80
 
105
81
  }
106
82
 
83
+ this.fsQuad.render( renderer );
84
+
107
85
  }
108
86
 
109
87
  dispose() {
@@ -179,9 +157,6 @@ class RenderTransitionPass extends Pass {
179
157
 
180
158
  }
181
159
 
182
- #include <tonemapping_fragment>
183
- #include <colorspace_fragment>
184
-
185
160
  }
186
161
  `
187
162
  } );
@@ -39,6 +39,7 @@ class SSAOPass extends Pass {
39
39
  this.height = ( height !== undefined ) ? height : 512;
40
40
 
41
41
  this.clear = true;
42
+ this.needsSwap = false;
42
43
 
43
44
  this.camera = camera;
44
45
  this.scene = scene;
@@ -201,7 +202,7 @@ class SSAOPass extends Pass {
201
202
 
202
203
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssaoRenderTarget.texture;
203
204
  this.copyMaterial.blending = NoBlending;
204
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
205
+ this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );
205
206
 
206
207
  break;
207
208
 
@@ -209,13 +210,13 @@ class SSAOPass extends Pass {
209
210
 
210
211
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;
211
212
  this.copyMaterial.blending = NoBlending;
212
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
213
+ this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );
213
214
 
214
215
  break;
215
216
 
216
217
  case SSAOPass.OUTPUT.Depth:
217
218
 
218
- this.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );
219
+ this.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : readBuffer );
219
220
 
220
221
  break;
221
222
 
@@ -223,19 +224,15 @@ class SSAOPass extends Pass {
223
224
 
224
225
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.normalRenderTarget.texture;
225
226
  this.copyMaterial.blending = NoBlending;
226
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
227
+ this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );
227
228
 
228
229
  break;
229
230
 
230
231
  case SSAOPass.OUTPUT.Default:
231
232
 
232
- this.copyMaterial.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
233
- this.copyMaterial.blending = NoBlending;
234
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
235
-
236
233
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;
237
234
  this.copyMaterial.blending = CustomBlending;
238
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
235
+ this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );
239
236
 
240
237
  break;
241
238
 
@@ -49,12 +49,12 @@ class UnrealBloomPass extends Pass {
49
49
 
50
50
  for ( let i = 0; i < this.nMips; i ++ ) {
51
51
 
52
- const renderTargetHorizonal = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );
52
+ const renderTargetHorizontal = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );
53
53
 
54
- renderTargetHorizonal.texture.name = 'UnrealBloomPass.h' + i;
55
- renderTargetHorizonal.texture.generateMipmaps = false;
54
+ renderTargetHorizontal.texture.name = 'UnrealBloomPass.h' + i;
55
+ renderTargetHorizontal.texture.generateMipmaps = false;
56
56
 
57
- this.renderTargetsHorizontal.push( renderTargetHorizonal );
57
+ this.renderTargetsHorizontal.push( renderTargetHorizontal );
58
58
 
59
59
  const renderTargetVertical = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );
60
60
 
@@ -114,22 +114,42 @@ class CSS2DRenderer {
114
114
 
115
115
  };
116
116
 
117
+ function hideObject( object ) {
118
+
119
+ if ( object.isCSS2DObject ) object.element.style.display = 'none';
120
+
121
+ for ( let i = 0, l = object.children.length; i < l; i ++ ) {
122
+
123
+ hideObject( object.children[ i ] );
124
+
125
+ }
126
+
127
+ }
128
+
117
129
  function renderObject( object, scene, camera ) {
118
130
 
131
+ if ( object.visible === false ) {
132
+
133
+ hideObject( object );
134
+
135
+ return;
136
+
137
+ }
138
+
119
139
  if ( object.isCSS2DObject ) {
120
140
 
121
141
  _vector.setFromMatrixPosition( object.matrixWorld );
122
142
  _vector.applyMatrix4( _viewProjectionMatrix );
123
143
 
124
- const visible = ( object.visible === true ) && ( _vector.z >= - 1 && _vector.z <= 1 ) && ( object.layers.test( camera.layers ) === true );
125
- object.element.style.display = ( visible === true ) ? '' : 'none';
144
+ const visible = ( _vector.z >= - 1 && _vector.z <= 1 ) && ( object.layers.test( camera.layers ) === true );
145
+
146
+ const element = object.element;
147
+ element.style.display = visible === true ? '' : 'none';
126
148
 
127
149
  if ( visible === true ) {
128
150
 
129
151
  object.onBeforeRender( _this, scene, camera );
130
152
 
131
- const element = object.element;
132
-
133
153
  element.style.transform = 'translate(' + ( - 100 * object.center.x ) + '%,' + ( - 100 * object.center.y ) + '%)' + 'translate(' + ( _vector.x * _widthHalf + _widthHalf ) + 'px,' + ( - _vector.y * _heightHalf + _heightHalf ) + 'px)';
134
154
 
135
155
  if ( element.parentNode !== domElement ) {
@@ -171,7 +191,7 @@ class CSS2DRenderer {
171
191
 
172
192
  const result = [];
173
193
 
174
- scene.traverse( function ( object ) {
194
+ scene.traverseVisible( function ( object ) {
175
195
 
176
196
  if ( object.isCSS2DObject ) result.push( object );
177
197
 
@@ -251,12 +251,34 @@ class CSS3DRenderer {
251
251
 
252
252
  }
253
253
 
254
+ function hideObject( object ) {
255
+
256
+ if ( object.isCSS3DObject ) object.element.style.display = 'none';
257
+
258
+ for ( let i = 0, l = object.children.length; i < l; i ++ ) {
259
+
260
+ hideObject( object.children[ i ] );
261
+
262
+ }
263
+
264
+ }
265
+
254
266
  function renderObject( object, scene, camera, cameraCSSMatrix ) {
255
267
 
268
+ if ( object.visible === false ) {
269
+
270
+ hideObject( object );
271
+
272
+ return;
273
+
274
+ }
275
+
256
276
  if ( object.isCSS3DObject ) {
257
277
 
258
- const visible = ( object.visible === true ) && ( object.layers.test( camera.layers ) === true );
259
- object.element.style.display = ( visible === true ) ? '' : 'none';
278
+ const visible = ( object.layers.test( camera.layers ) === true );
279
+
280
+ const element = object.element;
281
+ element.style.display = visible === true ? '' : 'none';
260
282
 
261
283
  if ( visible === true ) {
262
284
 
@@ -290,7 +312,6 @@ class CSS3DRenderer {
290
312
 
291
313
  }
292
314
 
293
- const element = object.element;
294
315
  const cachedObject = cache.objects.get( object );
295
316
 
296
317
  if ( cachedObject === undefined || cachedObject.style !== style ) {
@@ -39,8 +39,7 @@ const ColorifyShader = {
39
39
 
40
40
  vec4 texel = texture2D( tDiffuse, vUv );
41
41
 
42
- vec3 luma = vec3( 0.299, 0.587, 0.114 );
43
- float v = dot( texel.xyz, luma );
42
+ float v = luminance( texel.xyz );
44
43
 
45
44
  gl_FragColor = vec4( v * color, texel.w );
46
45
 
@@ -220,11 +220,9 @@ const FXAAShader = {
220
220
  vec2 posN = posM;
221
221
  vec2 posP = posM;
222
222
 
223
- int iterationsUsed = 0;
224
223
  int iterationsUsedN = 0;
225
224
  int iterationsUsedP = 0;
226
225
  for( int i = 0; i < NUM_SAMPLES; i++ ) {
227
- iterationsUsed = i;
228
226
 
229
227
  float increment = float(i + 1);
230
228
 
@@ -203,7 +203,7 @@ const GTAOShader = {
203
203
 
204
204
  const int DIRECTIONS = SAMPLES < 30 ? 3 : 5;
205
205
  const int STEPS = (SAMPLES + DIRECTIONS - 1) / DIRECTIONS;
206
- float ao = 0.0, totalWeight = 0.0;
206
+ float ao = 0.0;
207
207
  for (int i = 0; i < DIRECTIONS; ++i) {
208
208
 
209
209
  float angle = float(i) / float(DIRECTIONS) * PI;
@@ -49,9 +49,7 @@ const LuminosityHighPassShader = {
49
49
 
50
50
  vec4 texel = texture2D( tDiffuse, vUv );
51
51
 
52
- vec3 luma = vec3( 0.299, 0.587, 0.114 );
53
-
54
- float v = dot( texel.xyz, luma );
52
+ float v = luminance( texel.xyz );
55
53
 
56
54
  vec4 outputColor = vec4( defaultColor.rgb, defaultOpacity );
57
55
 
@@ -22,6 +22,14 @@ const precedenceOperators = [
22
22
  ','
23
23
  ].reverse();
24
24
 
25
+ const associativityRightToLeft = [
26
+ '=',
27
+ '+=', '-=', '*=', '/=', '%=', '^=', '&=', '|=', '<<=', '>>=',
28
+ ',',
29
+ '?',
30
+ ':'
31
+ ];
32
+
25
33
  const spaceRegExp = /^((\t| )\n*)+/;
26
34
  const lineRegExp = /^\n+/;
27
35
  const commentRegExp = /^\/\*[\s\S]*?\*\//;
@@ -297,13 +305,13 @@ class GLSLDecoder {
297
305
 
298
306
  for ( const operator of precedenceOperators ) {
299
307
 
300
- for ( let i = 0; i < tokens.length; i ++ ) {
308
+ const parseToken = ( i, inverse = false ) => {
301
309
 
302
310
  const token = tokens[ i ];
303
311
 
304
312
  groupIndex += getGroupDelta( token.str );
305
313
 
306
- if ( ! token.isOperator || i === 0 || i === tokens.length - 1 ) continue;
314
+ if ( ! token.isOperator || i === 0 || i === tokens.length - 1 ) return;
307
315
 
308
316
  if ( groupIndex === 0 && token.str === operator ) {
309
317
 
@@ -330,9 +338,43 @@ class GLSLDecoder {
330
338
 
331
339
  }
332
340
 
333
- if ( groupIndex < 0 ) {
341
+ if ( inverse ) {
342
+
343
+ if ( groupIndex > 0 ) {
344
+
345
+ return this.parseExpressionFromTokens( tokens.slice( i ) );
346
+
347
+ }
348
+
349
+ } else {
350
+
351
+ if ( groupIndex < 0 ) {
352
+
353
+ return this.parseExpressionFromTokens( tokens.slice( 0, i ) );
354
+
355
+ }
356
+
357
+ }
358
+
359
+ };
360
+
361
+ if ( associativityRightToLeft.includes( operator ) ) {
362
+
363
+ for ( let i = 0; i < tokens.length; i ++ ) {
364
+
365
+ const result = parseToken( i );
366
+
367
+ if ( result ) return result;
368
+
369
+ }
370
+
371
+ } else {
372
+
373
+ for ( let i = tokens.length - 1; i >= 0; i -- ) {
374
+
375
+ const result = parseToken( i, true );
334
376
 
335
- return this.parseExpressionFromTokens( tokens.slice( 0, i ) );
377
+ if ( result ) return result;
336
378
 
337
379
  }
338
380
 
@@ -1,6 +1,6 @@
1
- import { REVISION } from 'three';
1
+ import * as THREE from 'three';
2
+
2
3
  import { VariableDeclaration, Accessor } from './AST.js';
3
- import * as Nodes from '../nodes/Nodes.js';
4
4
 
5
5
  const opLib = {
6
6
  '=': 'assign',
@@ -53,7 +53,6 @@ class TSLEncoder {
53
53
  this.imports = new Set();
54
54
  this.global = new Set();
55
55
  this.overloadings = new Map();
56
- this.layoutsCode = '';
57
56
  this.iife = false;
58
57
  this.uniqueNames = false;
59
58
  this.reference = false;
@@ -69,7 +68,7 @@ class TSLEncoder {
69
68
 
70
69
  name = name.split( '.' )[ 0 ];
71
70
 
72
- if ( Nodes[ name ] !== undefined && this.global.has( name ) === false && this._currentProperties[ name ] === undefined ) {
71
+ if ( THREE[ name ] !== undefined && this.global.has( name ) === false && this._currentProperties[ name ] === undefined ) {
73
72
 
74
73
  this.imports.add( name );
75
74
 
@@ -502,7 +501,9 @@ ${ this.tab }} )`;
502
501
 
503
502
  this.addImport( 'overloadingFn' );
504
503
 
505
- return `const ${ name } = overloadingFn( [ ${ nodes.map( node => node.name + '_' + nodes.indexOf( node ) ).join( ', ' ) } ] );\n`;
504
+ const prefix = this.iife === false ? 'export ' : '';
505
+
506
+ return `${ prefix }const ${ name } = /*#__PURE__*/ overloadingFn( [ ${ nodes.map( node => node.name + '_' + nodes.indexOf( node ) ).join( ', ' ) } ] );\n`;
506
507
 
507
508
  }
508
509
 
@@ -583,11 +584,13 @@ ${ this.tab }} )`;
583
584
 
584
585
  }
585
586
 
586
- let funcStr = `const ${ fnName } = tslFn( (${ paramsStr }) => {
587
+ const prefix = this.iife === false ? 'export ' : '';
588
+
589
+ let funcStr = `${ prefix }const ${ fnName } = /*#__PURE__*/ tslFn( (${ paramsStr }) => {
587
590
 
588
591
  ${ bodyStr }
589
592
 
590
- ${ this.tab }} );\n`;
593
+ ${ this.tab }} )`;
591
594
 
592
595
  const layoutInput = inputs.length > 0 ? '\n\t\t' + this.tab + inputs.join( ',\n\t\t' + this.tab ) + '\n\t' + this.tab : '';
593
596
 
@@ -595,14 +598,16 @@ ${ this.tab }} );\n`;
595
598
 
596
599
  const uniqueName = this.uniqueNames ? fnName + '_' + Math.random().toString( 36 ).slice( 2 ) : fnName;
597
600
 
598
- this.layoutsCode += `${ this.tab + fnName }.setLayout( {
601
+ funcStr += `.setLayout( {
599
602
  ${ this.tab }\tname: '${ uniqueName }',
600
603
  ${ this.tab }\ttype: '${ type }',
601
604
  ${ this.tab }\tinputs: [${ layoutInput }]
602
- ${ this.tab }} );\n\n`;
605
+ ${ this.tab }} )`;
603
606
 
604
607
  }
605
608
 
609
+ funcStr += ';\n';
610
+
606
611
  this.imports.add( 'tslFn' );
607
612
 
608
613
  this.global.add( node.name );
@@ -685,9 +690,7 @@ ${ this.tab }} );\n\n`;
685
690
  const imports = [ ...this.imports ];
686
691
  const exports = [ ...this.global ];
687
692
 
688
- const layouts = this.layoutsCode.length > 0 ? `\n${ this.tab }// layouts\n\n` + this.layoutsCode : '';
689
-
690
- let header = '// Three.js Transpiler r' + REVISION + '\n\n';
693
+ let header = '// Three.js Transpiler r' + THREE.REVISION + '\n\n';
691
694
  let footer = '';
692
695
 
693
696
  if ( this.iife ) {
@@ -701,12 +704,11 @@ ${ this.tab }} );\n\n`;
701
704
 
702
705
  } else {
703
706
 
704
- header += imports.length > 0 ? 'import { ' + imports.join( ', ' ) + ' } from \'three/nodes\';\n' : '';
705
- footer += exports.length > 0 ? 'export { ' + exports.join( ', ' ) + ' };\n' : '';
707
+ header += imports.length > 0 ? 'import { ' + imports.join( ', ' ) + ' } from \'three/tsl\';\n' : '';
706
708
 
707
709
  }
708
710
 
709
- return header + code + layouts + footer;
711
+ return header + code + footer;
710
712
 
711
713
  }
712
714