super-three 0.167.0 → 0.169.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 (387) hide show
  1. package/build/three.cjs +532 -173
  2. package/build/three.module.js +532 -174
  3. package/build/three.module.min.js +1 -1
  4. package/build/three.webgpu.js +18173 -14266
  5. package/build/three.webgpu.min.js +1 -1
  6. package/build/three.webgpu.nodes.js +79941 -0
  7. package/build/three.webgpu.nodes.min.js +6 -0
  8. package/examples/jsm/Addons.js +0 -4
  9. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  10. package/examples/jsm/capabilities/WebGL.js +27 -21
  11. package/examples/jsm/controls/ArcballControls.js +174 -158
  12. package/examples/jsm/controls/DragControls.js +260 -132
  13. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  14. package/examples/jsm/controls/FlyControls.js +194 -188
  15. package/examples/jsm/controls/OrbitControls.js +777 -786
  16. package/examples/jsm/controls/PointerLockControls.js +24 -15
  17. package/examples/jsm/controls/TrackballControls.js +469 -448
  18. package/examples/jsm/controls/TransformControls.js +97 -62
  19. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  20. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  21. package/examples/jsm/effects/StereoEffect.js +6 -1
  22. package/examples/jsm/environments/RoomEnvironment.js +1 -1
  23. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  24. package/examples/jsm/exporters/EXRExporter.js +19 -11
  25. package/examples/jsm/exporters/GLTFExporter.js +6 -1
  26. package/examples/jsm/exporters/KTX2Exporter.js +21 -13
  27. package/examples/jsm/exporters/OBJExporter.js +5 -1
  28. package/examples/jsm/exporters/PLYExporter.js +9 -7
  29. package/examples/jsm/exporters/USDZExporter.js +29 -8
  30. package/examples/jsm/geometries/DecalGeometry.js +4 -1
  31. package/examples/jsm/geometries/InstancedPointsGeometry.js +1 -1
  32. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  33. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  34. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  35. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  36. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  37. package/examples/jsm/lights/LightProbeGenerator.js +24 -10
  38. package/examples/jsm/loaders/ColladaLoader.js +9 -6
  39. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  40. package/examples/jsm/loaders/FBXLoader.js +30 -20
  41. package/examples/jsm/loaders/GLTFLoader.js +5 -10
  42. package/examples/jsm/loaders/KTX2Loader.js +27 -12
  43. package/examples/jsm/loaders/MTLLoader.js +4 -3
  44. package/examples/jsm/loaders/MaterialXLoader.js +40 -14
  45. package/examples/jsm/loaders/OBJLoader.js +5 -3
  46. package/examples/jsm/loaders/PCDLoader.js +14 -13
  47. package/examples/jsm/loaders/PDBLoader.js +3 -2
  48. package/examples/jsm/loaders/PLYLoader.js +8 -5
  49. package/examples/jsm/loaders/STLLoader.js +3 -2
  50. package/examples/jsm/loaders/VRMLLoader.js +10 -10
  51. package/examples/jsm/loaders/VTKLoader.js +4 -3
  52. package/examples/jsm/loaders/XYZLoader.js +3 -2
  53. package/examples/jsm/misc/Timer.js +1 -1
  54. package/examples/jsm/modifiers/CurveModifierGPU.js +233 -0
  55. package/examples/jsm/objects/LensflareMesh.js +322 -0
  56. package/examples/jsm/objects/SkyMesh.js +187 -0
  57. package/examples/jsm/objects/Water2Mesh.js +158 -0
  58. package/examples/jsm/objects/WaterMesh.js +101 -0
  59. package/examples/jsm/physics/JoltPhysics.js +1 -1
  60. package/examples/jsm/physics/RapierPhysics.js +21 -1
  61. package/examples/jsm/postprocessing/OutlinePass.js +31 -46
  62. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  63. package/examples/jsm/shaders/BleachBypassShader.js +1 -2
  64. package/examples/jsm/shaders/OutputShader.js +1 -1
  65. package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
  66. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -2
  67. package/examples/jsm/transpiler/TSLEncoder.js +8 -8
  68. package/examples/jsm/utils/GeometryCompressionUtils.js +37 -122
  69. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  70. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  71. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  72. package/examples/jsm/utils/TextureUtils.js +2 -1
  73. package/examples/jsm/utils/TextureUtilsGPU.js +63 -0
  74. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  75. package/package.json +3 -2
  76. package/src/Three.WebGPU.Nodes.js +200 -0
  77. package/src/Three.WebGPU.js +7 -0
  78. package/src/Three.js +1 -0
  79. package/src/audio/Audio.js +2 -2
  80. package/src/constants.js +1 -1
  81. package/src/core/BufferAttribute.js +0 -9
  82. package/src/core/Clock.js +1 -1
  83. package/src/core/InterleavedBuffer.js +0 -9
  84. package/src/extras/Controls.js +32 -0
  85. package/src/geometries/CylinderGeometry.js +11 -4
  86. package/src/loaders/MaterialLoader.js +7 -1
  87. package/src/loaders/ObjectLoader.js +3 -3
  88. package/src/{nodes/loaders → loaders/nodes}/NodeLoader.js +25 -5
  89. package/src/{nodes/loaders → loaders/nodes}/NodeMaterialLoader.js +21 -18
  90. package/src/{nodes/loaders → loaders/nodes}/NodeObjectLoader.js +19 -0
  91. package/src/materials/Material.js +4 -7
  92. package/src/materials/nodes/InstancedPointsNodeMaterial.js +156 -0
  93. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +56 -59
  94. package/src/{nodes/materials → materials/nodes}/LineBasicNodeMaterial.js +8 -5
  95. package/src/{nodes/materials → materials/nodes}/LineDashedNodeMaterial.js +12 -10
  96. package/src/{nodes/materials → materials/nodes}/MeshBasicNodeMaterial.js +16 -12
  97. package/src/{nodes/materials → materials/nodes}/MeshLambertNodeMaterial.js +10 -6
  98. package/src/{nodes/materials → materials/nodes}/MeshMatcapNodeMaterial.js +13 -9
  99. package/src/{nodes/materials → materials/nodes}/MeshNormalNodeMaterial.js +13 -9
  100. package/src/{nodes/materials → materials/nodes}/MeshPhongNodeMaterial.js +14 -9
  101. package/src/{nodes/materials → materials/nodes}/MeshPhysicalNodeMaterial.js +22 -18
  102. package/src/{nodes/materials → materials/nodes}/MeshSSSNodeMaterial.js +10 -7
  103. package/src/{nodes/materials → materials/nodes}/MeshStandardNodeMaterial.js +22 -12
  104. package/src/{nodes/materials → materials/nodes}/MeshToonNodeMaterial.js +9 -5
  105. package/src/{nodes/materials → materials/nodes}/NodeMaterial.js +71 -115
  106. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -1
  107. package/src/{nodes/materials → materials/nodes}/PointsNodeMaterial.js +8 -5
  108. package/src/{nodes/materials → materials/nodes}/ShadowNodeMaterial.js +9 -5
  109. package/src/{nodes/materials → materials/nodes}/SpriteNodeMaterial.js +47 -14
  110. package/src/{nodes/materials → materials/nodes}/VolumeNodeMaterial.js +24 -22
  111. package/src/materials/nodes/manager/NodeMaterialObserver.js +302 -0
  112. package/src/math/Triangle.js +24 -0
  113. package/src/nodes/Nodes.js +103 -159
  114. package/src/nodes/TSL.js +179 -0
  115. package/src/nodes/accessors/AccessorsUtils.js +8 -8
  116. package/src/nodes/accessors/BatchNode.js +53 -21
  117. package/src/nodes/accessors/{BitangentNode.js → Bitangent.js} +9 -9
  118. package/src/nodes/accessors/BufferAttributeNode.js +8 -5
  119. package/src/nodes/accessors/BufferNode.js +7 -4
  120. package/src/nodes/accessors/Camera.js +13 -0
  121. package/src/nodes/accessors/ClippingNode.js +19 -13
  122. package/src/nodes/accessors/CubeTextureNode.js +9 -8
  123. package/src/nodes/accessors/InstanceNode.js +19 -15
  124. package/src/nodes/accessors/InstancedPointsMaterialNode.js +8 -5
  125. package/src/nodes/accessors/Lights.js +51 -0
  126. package/src/nodes/accessors/MaterialNode.js +56 -55
  127. package/src/nodes/accessors/MaterialProperties.js +3 -0
  128. package/src/nodes/accessors/MaterialReferenceNode.js +9 -4
  129. package/src/nodes/accessors/ModelNode.js +47 -12
  130. package/src/nodes/accessors/ModelViewProjectionNode.js +12 -9
  131. package/src/nodes/accessors/MorphNode.js +17 -13
  132. package/src/nodes/accessors/Normal.js +88 -0
  133. package/src/nodes/accessors/Object3DNode.js +17 -33
  134. package/src/nodes/accessors/PointUVNode.js +9 -5
  135. package/src/nodes/accessors/Position.js +10 -0
  136. package/src/nodes/accessors/ReferenceBaseNode.js +171 -0
  137. package/src/nodes/accessors/ReferenceNode.js +50 -7
  138. package/src/nodes/accessors/ReflectVector.js +10 -0
  139. package/src/nodes/accessors/RendererReferenceNode.js +12 -6
  140. package/src/nodes/accessors/SceneNode.js +9 -6
  141. package/src/nodes/accessors/SkinningNode.js +88 -21
  142. package/src/nodes/accessors/StorageBufferNode.js +22 -5
  143. package/src/nodes/accessors/StorageTextureNode.js +9 -6
  144. package/src/nodes/accessors/Tangent.js +22 -0
  145. package/src/nodes/accessors/Texture3DNode.js +16 -13
  146. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +3 -32
  147. package/src/nodes/accessors/TextureNode.js +29 -23
  148. package/src/nodes/accessors/TextureSizeNode.js +10 -9
  149. package/src/nodes/accessors/{UniformsNode.js → UniformArrayNode.js} +26 -14
  150. package/src/nodes/accessors/UserDataNode.js +10 -7
  151. package/src/nodes/accessors/VelocityNode.js +134 -0
  152. package/src/nodes/accessors/VertexColorNode.js +7 -4
  153. package/src/nodes/code/CodeNode.js +9 -5
  154. package/src/nodes/code/ExpressionNode.js +10 -6
  155. package/src/nodes/code/FunctionCallNode.js +8 -5
  156. package/src/nodes/code/FunctionNode.js +8 -23
  157. package/src/nodes/code/ScriptableNode.js +13 -10
  158. package/src/nodes/code/ScriptableValueNode.js +9 -7
  159. package/src/nodes/core/AssignNode.js +12 -9
  160. package/src/nodes/core/AttributeNode.js +12 -21
  161. package/src/nodes/core/BypassNode.js +11 -7
  162. package/src/nodes/core/CacheNode.js +10 -6
  163. package/src/nodes/core/ConstNode.js +6 -3
  164. package/src/nodes/core/ContextNode.js +21 -11
  165. package/src/nodes/core/IndexNode.js +35 -8
  166. package/src/nodes/core/InputNode.js +7 -3
  167. package/src/nodes/core/MRTNode.js +16 -7
  168. package/src/nodes/core/Node.js +19 -40
  169. package/src/nodes/core/NodeBuilder.js +117 -38
  170. package/src/nodes/core/NodeUtils.js +49 -6
  171. package/src/nodes/core/OutputStructNode.js +10 -6
  172. package/src/nodes/core/ParameterNode.js +7 -4
  173. package/src/nodes/core/PropertyNode.js +36 -32
  174. package/src/nodes/core/StackNode.js +31 -11
  175. package/src/nodes/core/StructTypeNode.js +7 -3
  176. package/src/nodes/core/TempNode.js +8 -4
  177. package/src/nodes/core/UniformGroupNode.js +14 -11
  178. package/src/nodes/core/UniformNode.js +7 -4
  179. package/src/nodes/core/VarNode.js +12 -8
  180. package/src/nodes/core/VaryingNode.js +10 -6
  181. package/src/nodes/display/AfterImageNode.js +15 -9
  182. package/src/nodes/display/AnaglyphPassNode.js +67 -0
  183. package/src/nodes/display/AnamorphicNode.js +17 -11
  184. package/src/nodes/display/BleachBypass.js +26 -0
  185. package/src/nodes/display/BlendMode.js +54 -0
  186. package/src/nodes/display/BloomNode.js +27 -19
  187. package/src/nodes/display/BumpMapNode.js +13 -12
  188. package/src/nodes/display/ColorAdjustment.js +46 -0
  189. package/src/nodes/display/ColorSpaceFunctions.js +38 -0
  190. package/src/nodes/display/ColorSpaceNode.js +67 -61
  191. package/src/nodes/display/DenoiseNode.js +23 -17
  192. package/src/nodes/display/DepthOfFieldNode.js +12 -7
  193. package/src/nodes/display/DotScreenNode.js +13 -22
  194. package/src/nodes/display/FXAANode.js +21 -16
  195. package/src/nodes/display/FilmNode.js +11 -7
  196. package/src/nodes/display/FrontFacingNode.js +10 -6
  197. package/src/nodes/display/GTAONode.js +22 -15
  198. package/src/nodes/display/GaussianBlurNode.js +14 -8
  199. package/src/nodes/display/Lut3DNode.js +10 -6
  200. package/src/nodes/display/MotionBlur.js +25 -0
  201. package/src/nodes/display/NormalMapNode.js +13 -13
  202. package/src/nodes/display/ParallaxBarrierPassNode.js +58 -0
  203. package/src/nodes/display/PassNode.js +95 -8
  204. package/src/nodes/display/PixelationPassNode.js +20 -8
  205. package/src/nodes/display/PosterizeNode.js +8 -7
  206. package/src/nodes/display/RGBShiftNode.js +11 -7
  207. package/src/nodes/display/RenderOutputNode.js +15 -11
  208. package/src/nodes/display/SSAAPassNode.js +287 -0
  209. package/src/nodes/display/ScreenNode.js +181 -0
  210. package/src/nodes/display/Sepia.js +17 -0
  211. package/src/nodes/display/SobelOperatorNode.js +13 -8
  212. package/src/nodes/display/StereoCompositePassNode.js +110 -0
  213. package/src/nodes/display/StereoPassNode.js +83 -0
  214. package/src/nodes/display/ToneMappingFunctions.js +190 -0
  215. package/src/nodes/display/ToneMappingNode.js +15 -175
  216. package/src/nodes/display/ToonOutlinePassNode.js +111 -0
  217. package/src/nodes/display/TransitionNode.js +12 -8
  218. package/src/nodes/display/ViewportDepthNode.js +34 -29
  219. package/src/nodes/display/ViewportDepthTextureNode.js +10 -9
  220. package/src/nodes/display/ViewportSharedTextureNode.js +10 -9
  221. package/src/nodes/display/ViewportTextureNode.js +11 -11
  222. package/src/nodes/fog/FogExp2Node.js +8 -7
  223. package/src/nodes/fog/FogNode.js +10 -8
  224. package/src/nodes/fog/FogRangeNode.js +8 -7
  225. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  226. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  227. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  228. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  229. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  230. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  231. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  232. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  233. package/src/nodes/functions/BSDF/LTC.js +6 -6
  234. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  235. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  236. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  237. package/src/nodes/functions/BasicLightingModel.js +1 -1
  238. package/src/nodes/functions/PhongLightingModel.js +5 -5
  239. package/src/nodes/functions/PhysicalLightingModel.js +34 -33
  240. package/src/nodes/functions/ShadowMaskModel.js +1 -1
  241. package/src/nodes/functions/ToonLightingModel.js +3 -3
  242. package/src/nodes/functions/material/getGeometryRoughness.js +4 -4
  243. package/src/nodes/functions/material/getRoughness.js +2 -2
  244. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  245. package/src/nodes/geometry/RangeNode.js +9 -5
  246. package/src/nodes/gpgpu/AtomicFunctionNode.js +99 -0
  247. package/src/nodes/gpgpu/BarrierNode.js +40 -0
  248. package/src/nodes/gpgpu/ComputeBuiltinNode.js +98 -0
  249. package/src/nodes/gpgpu/ComputeNode.js +10 -6
  250. package/src/nodes/gpgpu/WorkgroupInfoNode.js +100 -0
  251. package/src/nodes/lighting/AONode.js +6 -3
  252. package/src/nodes/lighting/AmbientLightNode.js +6 -8
  253. package/src/nodes/lighting/AnalyticLightNode.js +225 -36
  254. package/src/nodes/lighting/BasicEnvironmentNode.js +8 -4
  255. package/src/nodes/lighting/BasicLightMapNode.js +7 -4
  256. package/src/nodes/lighting/DirectionalLightNode.js +7 -9
  257. package/src/nodes/lighting/EnvironmentNode.js +23 -19
  258. package/src/nodes/lighting/HemisphereLightNode.js +11 -11
  259. package/src/nodes/lighting/IESSpotLightNode.js +7 -9
  260. package/src/nodes/lighting/IrradianceNode.js +6 -3
  261. package/src/nodes/lighting/LightProbeNode.js +53 -0
  262. package/src/nodes/lighting/LightUtils.js +3 -3
  263. package/src/nodes/lighting/LightingContextNode.js +19 -18
  264. package/src/nodes/lighting/LightingNode.js +7 -3
  265. package/src/nodes/lighting/LightsNode.js +112 -75
  266. package/src/nodes/lighting/PointLightNode.js +12 -13
  267. package/src/nodes/lighting/RectAreaLightNode.js +11 -11
  268. package/src/nodes/lighting/SpotLightNode.js +14 -16
  269. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  270. package/src/nodes/materialx/lib/mx_hsv.js +36 -31
  271. package/src/nodes/materialx/lib/mx_noise.js +96 -96
  272. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  273. package/src/nodes/math/{CondNode.js → ConditionalNode.js} +38 -10
  274. package/src/nodes/math/Hash.js +13 -0
  275. package/src/nodes/math/MathNode.js +127 -124
  276. package/src/nodes/math/MathUtils.js +0 -7
  277. package/src/nodes/math/OperatorNode.js +97 -52
  278. package/src/nodes/math/TriNoise3D.js +19 -29
  279. package/src/nodes/pmrem/PMREMNode.js +61 -15
  280. package/src/nodes/pmrem/PMREMUtils.js +46 -46
  281. package/src/nodes/procedural/Checker.js +14 -0
  282. package/src/nodes/tsl/TSLBase.js +30 -0
  283. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +105 -97
  284. package/src/nodes/utils/ArrayElementNode.js +8 -4
  285. package/src/nodes/utils/ConvertNode.js +7 -3
  286. package/src/nodes/utils/CubeMapNode.js +160 -0
  287. package/src/nodes/utils/Discard.js +8 -0
  288. package/src/nodes/utils/EquirectUVNode.js +9 -6
  289. package/src/nodes/utils/FlipNode.js +68 -0
  290. package/src/nodes/utils/FunctionOverloadingNode.js +9 -5
  291. package/src/nodes/utils/JoinNode.js +6 -3
  292. package/src/nodes/utils/LoopNode.js +16 -6
  293. package/src/nodes/utils/MatcapUVNode.js +10 -7
  294. package/src/nodes/utils/MaxMipLevelNode.js +8 -5
  295. package/src/nodes/utils/OscNode.js +12 -8
  296. package/src/nodes/utils/Packing.js +4 -0
  297. package/src/nodes/utils/RTTNode.js +11 -8
  298. package/src/nodes/utils/ReflectorNode.js +12 -4
  299. package/src/nodes/utils/RemapNode.js +12 -8
  300. package/src/nodes/utils/RotateNode.js +8 -13
  301. package/src/nodes/utils/SetNode.js +7 -4
  302. package/src/nodes/utils/SplitNode.js +7 -3
  303. package/src/nodes/utils/SpriteSheetUVNode.js +10 -6
  304. package/src/nodes/utils/SpriteUtils.js +47 -0
  305. package/src/nodes/utils/StorageArrayElementNode.js +11 -12
  306. package/src/nodes/utils/TimerNode.js +8 -5
  307. package/src/nodes/utils/TriplanarTexturesNode.js +11 -9
  308. package/src/nodes/utils/UVUtils.js +19 -0
  309. package/src/nodes/utils/ViewportUtils.js +14 -0
  310. package/src/objects/BatchedMesh.js +78 -13
  311. package/src/objects/LOD.js +21 -0
  312. package/src/objects/Line.js +1 -0
  313. package/src/objects/Mesh.js +7 -23
  314. package/src/objects/Points.js +2 -0
  315. package/src/renderers/WebGLRenderer.js +88 -41
  316. package/src/renderers/common/Backend.js +2 -2
  317. package/src/renderers/common/Background.js +3 -1
  318. package/src/renderers/common/BindGroup.js +3 -1
  319. package/src/renderers/common/Bindings.js +13 -15
  320. package/src/renderers/common/BundleGroup.js +26 -0
  321. package/src/renderers/common/ClippingContext.js +15 -5
  322. package/src/renderers/common/CubeRenderTarget.js +9 -3
  323. package/src/renderers/common/PostProcessing.js +4 -1
  324. package/src/renderers/common/QuadMesh.js +2 -0
  325. package/src/renderers/common/RenderContext.js +23 -0
  326. package/src/renderers/common/RenderList.js +1 -1
  327. package/src/renderers/common/RenderObject.js +117 -6
  328. package/src/renderers/common/RenderObjects.js +8 -1
  329. package/src/renderers/common/Renderer.js +128 -94
  330. package/src/renderers/common/SampledTexture.js +12 -3
  331. package/src/renderers/common/Textures.js +8 -12
  332. package/src/renderers/common/extras/PMREMGenerator.js +19 -22
  333. package/src/renderers/common/nodes/NodeBuilderState.js +4 -4
  334. package/src/renderers/common/nodes/NodeLibrary.js +118 -0
  335. package/src/renderers/common/nodes/NodeSampledTexture.js +2 -2
  336. package/src/renderers/common/nodes/Nodes.js +65 -19
  337. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  338. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  339. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  340. package/src/renderers/webgl/WebGLCapabilities.js +9 -0
  341. package/src/renderers/webgl/WebGLProgram.js +3 -1
  342. package/src/renderers/webgl/WebGLPrograms.js +21 -17
  343. package/src/renderers/webgl/WebGLProperties.js +7 -0
  344. package/src/renderers/webgl/WebGLState.js +21 -0
  345. package/src/renderers/webgl/WebGLTextures.js +83 -4
  346. package/src/renderers/webgl-fallback/WebGLBackend.js +135 -110
  347. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +60 -12
  348. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +6 -0
  349. package/src/renderers/webgl-fallback/utils/WebGLState.js +20 -2
  350. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +89 -37
  351. package/src/renderers/webgpu/WebGPUBackend.js +112 -86
  352. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +42 -0
  353. package/src/renderers/webgpu/WebGPURenderer.js +9 -6
  354. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +59 -0
  355. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +105 -0
  356. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +189 -73
  357. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +6 -16
  358. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +45 -21
  359. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -1
  360. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +7 -16
  361. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
  362. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +43 -26
  363. package/src/renderers/webgpu/utils/WebGPUUtils.js +19 -2
  364. package/src/renderers/webxr/WebXRManager.js +32 -25
  365. package/src/utils.js +33 -1
  366. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  367. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  368. package/examples/jsm/loaders/TiltLoader.js +0 -520
  369. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  370. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  371. package/src/nodes/accessors/CameraNode.js +0 -19
  372. package/src/nodes/accessors/NormalNode.js +0 -14
  373. package/src/nodes/accessors/PositionNode.js +0 -10
  374. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  375. package/src/nodes/accessors/TangentNode.js +0 -23
  376. package/src/nodes/core/NodeKeywords.js +0 -80
  377. package/src/nodes/display/BlendModeNode.js +0 -128
  378. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  379. package/src/nodes/display/ViewportNode.js +0 -137
  380. package/src/nodes/lighting/LightNode.js +0 -57
  381. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  382. package/src/nodes/math/HashNode.js +0 -34
  383. package/src/nodes/procedural/CheckerNode.js +0 -42
  384. package/src/nodes/utils/DiscardNode.js +0 -28
  385. package/src/nodes/utils/PackingNode.js +0 -55
  386. package/src/nodes/utils/RotateUVNode.js +0 -35
  387. /package/src/nodes/accessors/{UVNode.js → UV.js} +0 -0
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  BoxGeometry,
3
3
  BufferGeometry,
4
+ Controls,
4
5
  CylinderGeometry,
5
6
  DoubleSide,
6
7
  Euler,
@@ -36,32 +37,22 @@ const _mouseDownEvent = { type: 'mouseDown', mode: null };
36
37
  const _mouseUpEvent = { type: 'mouseUp', mode: null };
37
38
  const _objectChangeEvent = { type: 'objectChange' };
38
39
 
39
- class TransformControls extends Object3D {
40
+ class TransformControls extends Controls {
40
41
 
41
- constructor( camera, domElement ) {
42
+ constructor( camera, domElement = null ) {
42
43
 
43
- super();
44
-
45
- if ( domElement === undefined ) {
46
-
47
- console.warn( 'THREE.TransformControls: The second parameter "domElement" is now mandatory.' );
48
- domElement = document;
44
+ super( undefined, domElement );
49
45
 
50
- }
46
+ const root = new TransformControlsRoot( this );
47
+ this._root = root;
51
48
 
52
- this.isTransformControls = true;
49
+ const gizmo = new TransformControlsGizmo();
50
+ this._gizmo = gizmo;
51
+ root.add( gizmo );
53
52
 
54
- this.visible = false;
55
- this.domElement = domElement;
56
- this.domElement.style.touchAction = 'none'; // disable touch scroll
57
-
58
- const _gizmo = new TransformControlsGizmo();
59
- this._gizmo = _gizmo;
60
- this.add( _gizmo );
61
-
62
- const _plane = new TransformControlsPlane();
63
- this._plane = _plane;
64
- this.add( _plane );
53
+ const plane = new TransformControlsPlane();
54
+ this._plane = plane;
55
+ root.add( plane );
65
56
 
66
57
  const scope = this;
67
58
 
@@ -83,8 +74,8 @@ class TransformControls extends Object3D {
83
74
  if ( propValue !== value ) {
84
75
 
85
76
  propValue = value;
86
- _plane[ propName ] = value;
87
- _gizmo[ propName ] = value;
77
+ plane[ propName ] = value;
78
+ gizmo[ propName ] = value;
88
79
 
89
80
  scope.dispatchEvent( { type: propName + '-changed', value: value } );
90
81
  scope.dispatchEvent( _changeEvent );
@@ -96,8 +87,8 @@ class TransformControls extends Object3D {
96
87
  } );
97
88
 
98
89
  scope[ propName ] = defaultValue;
99
- _plane[ propName ] = defaultValue;
100
- _gizmo[ propName ] = defaultValue;
90
+ plane[ propName ] = defaultValue;
91
+ gizmo[ propName ] = defaultValue;
101
92
 
102
93
  }
103
94
 
@@ -172,50 +163,38 @@ class TransformControls extends Object3D {
172
163
  this._onPointerMove = onPointerMove.bind( this );
173
164
  this._onPointerUp = onPointerUp.bind( this );
174
165
 
175
- this.domElement.addEventListener( 'pointerdown', this._onPointerDown );
176
- this.domElement.addEventListener( 'pointermove', this._onPointerHover );
177
- this.domElement.addEventListener( 'pointerup', this._onPointerUp );
178
-
179
- }
180
-
181
- // updateMatrixWorld updates key transformation variables
182
- updateMatrixWorld( force ) {
183
-
184
- if ( this.object !== undefined ) {
166
+ if ( domElement !== null ) {
185
167
 
186
- this.object.updateMatrixWorld();
187
-
188
- if ( this.object.parent === null ) {
189
-
190
- console.error( 'TransformControls: The attached 3D object must be a part of the scene graph.' );
191
-
192
- } else {
168
+ this.connect();
193
169
 
194
- this.object.parent.matrixWorld.decompose( this._parentPosition, this._parentQuaternion, this._parentScale );
170
+ }
195
171
 
196
- }
172
+ }
197
173
 
198
- this.object.matrixWorld.decompose( this.worldPosition, this.worldQuaternion, this._worldScale );
174
+ connect() {
199
175
 
200
- this._parentQuaternionInv.copy( this._parentQuaternion ).invert();
201
- this._worldQuaternionInv.copy( this.worldQuaternion ).invert();
176
+ this.domElement.addEventListener( 'pointerdown', this._onPointerDown );
177
+ this.domElement.addEventListener( 'pointermove', this._onPointerHover );
178
+ this.domElement.addEventListener( 'pointerup', this._onPointerUp );
202
179
 
203
- }
180
+ this.domElement.style.touchAction = 'none'; // disable touch scroll
204
181
 
205
- this.camera.updateMatrixWorld();
206
- this.camera.matrixWorld.decompose( this.cameraPosition, this.cameraQuaternion, this._cameraScale );
182
+ }
207
183
 
208
- if ( this.camera.isOrthographicCamera ) {
184
+ disconnect() {
209
185
 
210
- this.camera.getWorldDirection( this.eye ).negate();
186
+ this.domElement.removeEventListener( 'pointerdown', this._onPointerDown );
187
+ this.domElement.removeEventListener( 'pointermove', this._onPointerHover );
188
+ this.domElement.removeEventListener( 'pointermove', this._onPointerMove );
189
+ this.domElement.removeEventListener( 'pointerup', this._onPointerUp );
211
190
 
212
- } else {
191
+ this.domElement.style.touchAction = 'auto';
213
192
 
214
- this.eye.copy( this.cameraPosition ).sub( this.worldPosition ).normalize();
193
+ }
215
194
 
216
- }
195
+ getHelper() {
217
196
 
218
- super.updateMatrixWorld( force );
197
+ return this._root;
219
198
 
220
199
  }
221
200
 
@@ -555,10 +534,7 @@ class TransformControls extends Object3D {
555
534
 
556
535
  dispose() {
557
536
 
558
- this.domElement.removeEventListener( 'pointerdown', this._onPointerDown );
559
- this.domElement.removeEventListener( 'pointermove', this._onPointerHover );
560
- this.domElement.removeEventListener( 'pointermove', this._onPointerMove );
561
- this.domElement.removeEventListener( 'pointerup', this._onPointerUp );
537
+ this.disconnect();
562
538
 
563
539
  this.traverse( function ( child ) {
564
540
 
@@ -573,7 +549,7 @@ class TransformControls extends Object3D {
573
549
  attach( object ) {
574
550
 
575
551
  this.object = object;
576
- this.visible = true;
552
+ this._root.visible = true;
577
553
 
578
554
  return this;
579
555
 
@@ -583,9 +559,10 @@ class TransformControls extends Object3D {
583
559
  detach() {
584
560
 
585
561
  this.object = undefined;
586
- this.visible = false;
587
562
  this.axis = null;
588
563
 
564
+ this._root.visible = false;
565
+
589
566
  return this;
590
567
 
591
568
  }
@@ -778,6 +755,64 @@ const _v1 = new Vector3();
778
755
  const _v2 = new Vector3();
779
756
  const _v3 = new Vector3();
780
757
 
758
+ class TransformControlsRoot extends Object3D {
759
+
760
+ constructor( controls ) {
761
+
762
+ super();
763
+
764
+ this.isTransformControlsRoot = true;
765
+
766
+ this.controls = controls;
767
+ this.visible = false;
768
+
769
+ }
770
+
771
+ // updateMatrixWorld updates key transformation variables
772
+ updateMatrixWorld( force ) {
773
+
774
+ const controls = this.controls;
775
+
776
+ if ( controls.object !== undefined ) {
777
+
778
+ controls.object.updateMatrixWorld();
779
+
780
+ if ( controls.object.parent === null ) {
781
+
782
+ console.error( 'TransformControls: The attached 3D object must be a part of the scene graph.' );
783
+
784
+ } else {
785
+
786
+ controls.object.parent.matrixWorld.decompose( controls._parentPosition, controls._parentQuaternion, controls._parentScale );
787
+
788
+ }
789
+
790
+ controls.object.matrixWorld.decompose( controls.worldPosition, controls.worldQuaternion, controls._worldScale );
791
+
792
+ controls._parentQuaternionInv.copy( controls._parentQuaternion ).invert();
793
+ controls._worldQuaternionInv.copy( controls.worldQuaternion ).invert();
794
+
795
+ }
796
+
797
+ controls.camera.updateMatrixWorld();
798
+ controls.camera.matrixWorld.decompose( controls.cameraPosition, controls.cameraQuaternion, controls._cameraScale );
799
+
800
+ if ( controls.camera.isOrthographicCamera ) {
801
+
802
+ controls.camera.getWorldDirection( controls.eye ).negate();
803
+
804
+ } else {
805
+
806
+ controls.eye.copy( controls.cameraPosition ).sub( controls.worldPosition ).normalize();
807
+
808
+ }
809
+
810
+ super.updateMatrixWorld( force );
811
+
812
+ }
813
+
814
+ }
815
+
781
816
  class TransformControlsGizmo extends Object3D {
782
817
 
783
818
  constructor() {
@@ -1,16 +1,13 @@
1
1
  import {
2
2
  LinearFilter,
3
3
  Matrix3,
4
- Mesh,
5
4
  NearestFilter,
6
- OrthographicCamera,
7
- PlaneGeometry,
8
5
  RGBAFormat,
9
- Scene,
10
6
  ShaderMaterial,
11
7
  StereoCamera,
12
8
  WebGLRenderTarget
13
9
  } from 'three';
10
+ import { FullScreenQuad } from '../postprocessing/Pass.js';
14
11
 
15
12
  class AnaglyphEffect {
16
13
 
@@ -30,10 +27,6 @@ class AnaglyphEffect {
30
27
  - 0.00155529, - 0.0184503, 1.2264
31
28
  ] );
32
29
 
33
- const _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
34
-
35
- const _scene = new Scene();
36
-
37
30
  const _stereo = new StereoCamera();
38
31
 
39
32
  const _params = { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat };
@@ -99,8 +92,7 @@ class AnaglyphEffect {
99
92
 
100
93
  } );
101
94
 
102
- const _mesh = new Mesh( new PlaneGeometry( 2, 2 ), _material );
103
- _scene.add( _mesh );
95
+ const _quad = new FullScreenQuad( _material );
104
96
 
105
97
  this.setSize = function ( width, height ) {
106
98
 
@@ -132,7 +124,7 @@ class AnaglyphEffect {
132
124
  renderer.render( scene, _stereo.cameraR );
133
125
 
134
126
  renderer.setRenderTarget( null );
135
- renderer.render( _scene, _camera );
127
+ _quad.render( renderer );
136
128
 
137
129
  renderer.setRenderTarget( currentRenderTarget );
138
130
 
@@ -142,8 +134,9 @@ class AnaglyphEffect {
142
134
 
143
135
  _renderTargetL.dispose();
144
136
  _renderTargetR.dispose();
145
- _mesh.geometry.dispose();
146
- _mesh.material.dispose();
137
+
138
+ _material.dispose();
139
+ _quad.dispose();
147
140
 
148
141
  };
149
142
 
@@ -1,24 +1,17 @@
1
1
  import {
2
2
  LinearFilter,
3
- Mesh,
4
3
  NearestFilter,
5
- OrthographicCamera,
6
- PlaneGeometry,
7
4
  RGBAFormat,
8
- Scene,
9
5
  ShaderMaterial,
10
6
  StereoCamera,
11
7
  WebGLRenderTarget
12
8
  } from 'three';
9
+ import { FullScreenQuad } from '../postprocessing/Pass.js';
13
10
 
14
11
  class ParallaxBarrierEffect {
15
12
 
16
13
  constructor( renderer ) {
17
14
 
18
- const _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
19
-
20
- const _scene = new Scene();
21
-
22
15
  const _stereo = new StereoCamera();
23
16
 
24
17
  const _params = { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat };
@@ -77,8 +70,7 @@ class ParallaxBarrierEffect {
77
70
 
78
71
  } );
79
72
 
80
- const mesh = new Mesh( new PlaneGeometry( 2, 2 ), _material );
81
- _scene.add( mesh );
73
+ const _quad = new FullScreenQuad( _material );
82
74
 
83
75
  this.setSize = function ( width, height ) {
84
76
 
@@ -93,6 +85,8 @@ class ParallaxBarrierEffect {
93
85
 
94
86
  this.render = function ( scene, camera ) {
95
87
 
88
+ const currentRenderTarget = renderer.getRenderTarget();
89
+
96
90
  if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
97
91
 
98
92
  if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
@@ -108,7 +102,19 @@ class ParallaxBarrierEffect {
108
102
  renderer.render( scene, _stereo.cameraR );
109
103
 
110
104
  renderer.setRenderTarget( null );
111
- renderer.render( _scene, _camera );
105
+ _quad.render( renderer );
106
+
107
+ renderer.setRenderTarget( currentRenderTarget );
108
+
109
+ };
110
+
111
+ this.dispose = function () {
112
+
113
+ _renderTargetL.dispose();
114
+ _renderTargetR.dispose();
115
+
116
+ _material.dispose();
117
+ _quad.dispose();
112
118
 
113
119
  };
114
120
 
@@ -31,9 +31,12 @@ class StereoEffect {
31
31
 
32
32
  _stereo.update( camera );
33
33
 
34
+ const currentAutoClear = renderer.autoClear;
34
35
  renderer.getSize( size );
35
36
 
36
- if ( renderer.autoClear ) renderer.clear();
37
+ renderer.autoClear = false;
38
+ renderer.clear();
39
+
37
40
  renderer.setScissorTest( true );
38
41
 
39
42
  renderer.setScissor( 0, 0, size.width / 2, size.height );
@@ -46,6 +49,8 @@ class StereoEffect {
46
49
 
47
50
  renderer.setScissorTest( false );
48
51
 
52
+ renderer.autoClear = currentAutoClear;
53
+
49
54
  };
50
55
 
51
56
  }
@@ -14,7 +14,7 @@ import {
14
14
 
15
15
  class RoomEnvironment extends Scene {
16
16
 
17
- constructor( renderer = null ) {
17
+ constructor() {
18
18
 
19
19
  super();
20
20
 
@@ -1,4 +1,4 @@
1
- import { Color } from 'three';
1
+ import { Color, ColorManagement, SRGBColorSpace } from 'three';
2
2
 
3
3
  /**
4
4
  * Export draco compressed files from threejs geometry objects.
@@ -227,7 +227,9 @@ function createVertexColorSRGBArray( attribute ) {
227
227
 
228
228
  for ( let i = 0, il = count; i < il; i ++ ) {
229
229
 
230
- _color.fromBufferAttribute( attribute, i ).convertLinearToSRGB();
230
+ _color.fromBufferAttribute( attribute, i );
231
+
232
+ ColorManagement.fromWorkingColorSpace( _color, SRGBColorSpace );
231
233
 
232
234
  array[ i * itemSize ] = _color.r;
233
235
  array[ i * itemSize + 1 ] = _color.g;
@@ -21,20 +21,20 @@ const ZIP_COMPRESSION = 3;
21
21
 
22
22
  class EXRExporter {
23
23
 
24
- parse( arg1, arg2, arg3 ) {
24
+ async parse( arg1, arg2, arg3 ) {
25
25
 
26
- if ( ! arg1 || ! ( arg1.isWebGLRenderer || arg1.isDataTexture ) ) {
26
+ if ( ! arg1 || ! ( arg1.isWebGLRenderer || arg1.isWebGPURenderer || arg1.isDataTexture ) ) {
27
27
 
28
28
  throw Error( 'EXRExporter.parse: Unsupported first parameter, expected instance of WebGLRenderer or DataTexture.' );
29
29
 
30
- } else if ( arg1.isWebGLRenderer ) {
30
+ } else if ( arg1.isWebGLRenderer || arg1.isWebGPURenderer ) {
31
31
 
32
32
  const renderer = arg1, renderTarget = arg2, options = arg3;
33
33
 
34
34
  supportedRTT( renderTarget );
35
35
 
36
36
  const info = buildInfoRTT( renderTarget, options ),
37
- dataBuffer = getPixelData( renderer, renderTarget, info ),
37
+ dataBuffer = await getPixelData( renderer, renderTarget, info ),
38
38
  rawContentBuffer = reorganizeDataBuffer( dataBuffer, info ),
39
39
  chunks = compressData( rawContentBuffer, info );
40
40
 
@@ -61,7 +61,7 @@ class EXRExporter {
61
61
 
62
62
  function supportedRTT( renderTarget ) {
63
63
 
64
- if ( ! renderTarget || ! renderTarget.isWebGLRenderTarget ) {
64
+ if ( ! renderTarget || ! renderTarget.isRenderTarget ) {
65
65
 
66
66
  throw Error( 'EXRExporter.parse: Unsupported second parameter, expected instance of WebGLRenderTarget.' );
67
67
 
@@ -189,22 +189,30 @@ function buildInfoDT( texture, options = {} ) {
189
189
 
190
190
  }
191
191
 
192
- function getPixelData( renderer, rtt, info ) {
192
+ async function getPixelData( renderer, rtt, info ) {
193
193
 
194
194
  let dataBuffer;
195
195
 
196
- if ( info.type === FloatType ) {
196
+ if ( renderer.isWebGLRenderer ) {
197
197
 
198
- dataBuffer = new Float32Array( info.width * info.height * info.numInputChannels );
198
+ if ( info.type === FloatType ) {
199
+
200
+ dataBuffer = new Float32Array( info.width * info.height * info.numInputChannels );
201
+
202
+ } else {
203
+
204
+ dataBuffer = new Uint16Array( info.width * info.height * info.numInputChannels );
205
+
206
+ }
207
+
208
+ await renderer.readRenderTargetPixelsAsync( rtt, 0, 0, info.width, info.height, dataBuffer );
199
209
 
200
210
  } else {
201
211
 
202
- dataBuffer = new Uint16Array( info.width * info.height * info.numInputChannels );
212
+ dataBuffer = await renderer.readRenderTargetPixelsAsync( rtt, 0, 0, info.width, info.height );
203
213
 
204
214
  }
205
215
 
206
- renderer.readRenderTargetPixels( rtt, 0, 0, info.width, info.height, dataBuffer );
207
-
208
216
  return dataBuffer;
209
217
 
210
218
  }
@@ -2837,7 +2837,12 @@ class GLTFMaterialsVolumeExtension {
2837
2837
 
2838
2838
  }
2839
2839
 
2840
- extensionDef.attenuationDistance = material.attenuationDistance;
2840
+ if ( material.attenuationDistance !== Infinity ) {
2841
+
2842
+ extensionDef.attenuationDistance = material.attenuationDistance;
2843
+
2844
+ }
2845
+
2841
2846
  extensionDef.attenuationColor = material.attenuationColor.toArray();
2842
2847
 
2843
2848
  materialDef.extensions = materialDef.extensions || {};
@@ -111,7 +111,7 @@ const ERROR_COLOR_SPACE = 'THREE.KTX2Exporter: Supported color spaces are SRGBCo
111
111
 
112
112
  export class KTX2Exporter {
113
113
 
114
- parse( arg1, arg2 ) {
114
+ async parse( arg1, arg2 ) {
115
115
 
116
116
  let texture;
117
117
 
@@ -119,9 +119,9 @@ export class KTX2Exporter {
119
119
 
120
120
  texture = arg1;
121
121
 
122
- } else if ( arg1.isWebGLRenderer && arg2.isWebGLRenderTarget ) {
122
+ } else if ( ( arg1.isWebGLRenderer || arg1.isWebGPURenderer ) && arg2.isRenderTarget ) {
123
123
 
124
- texture = toDataTexture( arg1, arg2 );
124
+ texture = await toDataTexture( arg1, arg2 );
125
125
 
126
126
  } else {
127
127
 
@@ -235,32 +235,40 @@ export class KTX2Exporter {
235
235
 
236
236
  }
237
237
 
238
- function toDataTexture( renderer, rtt ) {
238
+ async function toDataTexture( renderer, rtt ) {
239
239
 
240
240
  const channelCount = getChannelCount( rtt.texture );
241
241
 
242
242
  let view;
243
243
 
244
- if ( rtt.texture.type === FloatType ) {
244
+ if ( renderer.isWebGLRenderer ) {
245
245
 
246
- view = new Float32Array( rtt.width * rtt.height * channelCount );
246
+ if ( rtt.texture.type === FloatType ) {
247
247
 
248
- } else if ( rtt.texture.type === HalfFloatType ) {
248
+ view = new Float32Array( rtt.width * rtt.height * channelCount );
249
249
 
250
- view = new Uint16Array( rtt.width * rtt.height * channelCount );
250
+ } else if ( rtt.texture.type === HalfFloatType ) {
251
251
 
252
- } else if ( rtt.texture.type === UnsignedByteType ) {
252
+ view = new Uint16Array( rtt.width * rtt.height * channelCount );
253
253
 
254
- view = new Uint8Array( rtt.width * rtt.height * channelCount );
254
+ } else if ( rtt.texture.type === UnsignedByteType ) {
255
+
256
+ view = new Uint8Array( rtt.width * rtt.height * channelCount );
257
+
258
+ } else {
259
+
260
+ throw new Error( ERROR_TYPE );
261
+
262
+ }
263
+
264
+ await renderer.readRenderTargetPixelsAsync( rtt, 0, 0, rtt.width, rtt.height, view );
255
265
 
256
266
  } else {
257
267
 
258
- throw new Error( ERROR_TYPE );
268
+ view = await renderer.readRenderTargetPixelsAsync( rtt, 0, 0, rtt.width, rtt.height );
259
269
 
260
270
  }
261
271
 
262
- renderer.readRenderTargetPixels( rtt, 0, 0, rtt.width, rtt.height, view );
263
-
264
272
  return new DataTexture( view, rtt.width, rtt.height, rtt.texture.format, rtt.texture.type );
265
273
 
266
274
  }
@@ -1,6 +1,8 @@
1
1
  import {
2
2
  Color,
3
+ ColorManagement,
3
4
  Matrix3,
5
+ SRGBColorSpace,
4
6
  Vector2,
5
7
  Vector3
6
8
  } from 'three';
@@ -226,7 +228,9 @@ class OBJExporter {
226
228
 
227
229
  if ( colors !== undefined ) {
228
230
 
229
- color.fromBufferAttribute( colors, i ).convertLinearToSRGB();
231
+ color.fromBufferAttribute( colors, i );
232
+
233
+ ColorManagement.fromWorkingColorSpace( color, SRGBColorSpace );
230
234
 
231
235
  output += ' ' + color.r + ' ' + color.g + ' ' + color.b;
232
236
 
@@ -1,7 +1,9 @@
1
1
  import {
2
2
  Matrix3,
3
3
  Vector3,
4
- Color
4
+ Color,
5
+ ColorManagement,
6
+ SRGBColorSpace
5
7
  } from 'three';
6
8
 
7
9
  /**
@@ -302,9 +304,9 @@ class PLYExporter {
302
304
 
303
305
  if ( colors != null ) {
304
306
 
305
- tempColor
306
- .fromBufferAttribute( colors, i )
307
- .convertLinearToSRGB();
307
+ tempColor.fromBufferAttribute( colors, i );
308
+
309
+ ColorManagement.fromWorkingColorSpace( tempColor, SRGBColorSpace );
308
310
 
309
311
  output.setUint8( vOffset, Math.floor( tempColor.r * 255 ) );
310
312
  vOffset += 1;
@@ -461,9 +463,9 @@ class PLYExporter {
461
463
 
462
464
  if ( colors != null ) {
463
465
 
464
- tempColor
465
- .fromBufferAttribute( colors, i )
466
- .convertLinearToSRGB();
466
+ tempColor.fromBufferAttribute( colors, i );
467
+
468
+ ColorManagement.fromWorkingColorSpace( tempColor, SRGBColorSpace );
467
469
 
468
470
  line += ' ' +
469
471
  Math.floor( tempColor.r * 255 ) + ' ' +