super-three 0.168.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 (286) hide show
  1. package/build/three.cjs +369 -131
  2. package/build/three.module.js +369 -131
  3. package/build/three.module.min.js +1 -1
  4. package/build/three.webgpu.js +24644 -22406
  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 -6
  9. package/examples/jsm/controls/TrackballControls.js +32 -12
  10. package/examples/jsm/controls/TransformControls.js +97 -62
  11. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  12. package/examples/jsm/exporters/EXRExporter.js +19 -11
  13. package/examples/jsm/exporters/KTX2Exporter.js +21 -13
  14. package/examples/jsm/exporters/OBJExporter.js +5 -1
  15. package/examples/jsm/exporters/PLYExporter.js +9 -7
  16. package/examples/jsm/geometries/DecalGeometry.js +4 -1
  17. package/examples/jsm/geometries/InstancedPointsGeometry.js +1 -1
  18. package/examples/jsm/helpers/LightProbeHelper.js +1 -1
  19. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  20. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  21. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  22. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  23. package/examples/jsm/lights/LightProbeGenerator.js +24 -10
  24. package/examples/jsm/loaders/ColladaLoader.js +9 -6
  25. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  26. package/examples/jsm/loaders/FBXLoader.js +30 -20
  27. package/examples/jsm/loaders/GLTFLoader.js +5 -10
  28. package/examples/jsm/loaders/KTX2Loader.js +10 -7
  29. package/examples/jsm/loaders/MTLLoader.js +4 -3
  30. package/examples/jsm/loaders/MaterialXLoader.js +29 -10
  31. package/examples/jsm/loaders/OBJLoader.js +5 -3
  32. package/examples/jsm/loaders/PCDLoader.js +5 -4
  33. package/examples/jsm/loaders/PDBLoader.js +3 -2
  34. package/examples/jsm/loaders/PLYLoader.js +8 -5
  35. package/examples/jsm/loaders/STLLoader.js +3 -2
  36. package/examples/jsm/loaders/VRMLLoader.js +10 -10
  37. package/examples/jsm/loaders/VTKLoader.js +4 -3
  38. package/examples/jsm/loaders/XYZLoader.js +3 -2
  39. package/examples/jsm/misc/Timer.js +1 -1
  40. package/examples/jsm/modifiers/CurveModifierGPU.js +233 -0
  41. package/examples/jsm/objects/LensflareMesh.js +322 -0
  42. package/examples/jsm/objects/SkyMesh.js +1 -2
  43. package/examples/jsm/objects/Water2Mesh.js +2 -3
  44. package/examples/jsm/objects/WaterMesh.js +1 -2
  45. package/examples/jsm/physics/JoltPhysics.js +1 -1
  46. package/examples/jsm/physics/RapierPhysics.js +1 -1
  47. package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
  48. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -2
  49. package/examples/jsm/utils/GeometryCompressionUtils.js +37 -122
  50. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  51. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  52. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  53. package/examples/jsm/utils/TextureUtils.js +1 -0
  54. package/examples/jsm/utils/TextureUtilsGPU.js +63 -0
  55. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  56. package/package.json +2 -2
  57. package/src/Three.WebGPU.Nodes.js +200 -0
  58. package/src/Three.WebGPU.js +2 -1
  59. package/src/audio/Audio.js +2 -2
  60. package/src/constants.js +1 -1
  61. package/src/core/BufferAttribute.js +0 -9
  62. package/src/core/Clock.js +1 -1
  63. package/src/core/InterleavedBuffer.js +0 -9
  64. package/src/extras/Controls.js +1 -1
  65. package/src/geometries/CylinderGeometry.js +11 -4
  66. package/src/loaders/MaterialLoader.js +7 -1
  67. package/src/loaders/nodes/NodeLoader.js +24 -4
  68. package/src/loaders/nodes/NodeMaterialLoader.js +21 -17
  69. package/src/loaders/nodes/NodeObjectLoader.js +19 -0
  70. package/src/materials/nodes/InstancedPointsNodeMaterial.js +19 -34
  71. package/src/materials/nodes/Line2NodeMaterial.js +26 -26
  72. package/src/materials/nodes/LineBasicNodeMaterial.js +7 -3
  73. package/src/materials/nodes/LineDashedNodeMaterial.js +7 -3
  74. package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -3
  75. package/src/materials/nodes/MeshLambertNodeMaterial.js +7 -3
  76. package/src/materials/nodes/MeshMatcapNodeMaterial.js +7 -3
  77. package/src/materials/nodes/MeshNormalNodeMaterial.js +7 -3
  78. package/src/materials/nodes/MeshPhongNodeMaterial.js +7 -3
  79. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +6 -3
  80. package/src/materials/nodes/MeshSSSNodeMaterial.js +6 -3
  81. package/src/materials/nodes/MeshStandardNodeMaterial.js +7 -3
  82. package/src/materials/nodes/MeshToonNodeMaterial.js +7 -3
  83. package/src/materials/nodes/NodeMaterial.js +20 -45
  84. package/src/materials/nodes/NodeMaterials.js +2 -0
  85. package/src/materials/nodes/PointsNodeMaterial.js +7 -3
  86. package/src/materials/nodes/ShadowNodeMaterial.js +7 -3
  87. package/src/materials/nodes/SpriteNodeMaterial.js +39 -6
  88. package/src/materials/nodes/VolumeNodeMaterial.js +13 -9
  89. package/src/materials/nodes/manager/NodeMaterialObserver.js +302 -0
  90. package/src/math/Triangle.js +24 -0
  91. package/src/nodes/Nodes.js +3 -3
  92. package/src/nodes/TSL.js +96 -93
  93. package/src/nodes/accessors/BatchNode.js +7 -3
  94. package/src/nodes/accessors/BufferAttributeNode.js +6 -3
  95. package/src/nodes/accessors/BufferNode.js +6 -3
  96. package/src/nodes/accessors/Camera.js +10 -16
  97. package/src/nodes/accessors/ClippingNode.js +7 -3
  98. package/src/nodes/accessors/CubeTextureNode.js +6 -3
  99. package/src/nodes/accessors/InstanceNode.js +11 -11
  100. package/src/nodes/accessors/InstancedPointsMaterialNode.js +6 -3
  101. package/src/nodes/accessors/Lights.js +51 -0
  102. package/src/nodes/accessors/MaterialNode.js +8 -4
  103. package/src/nodes/accessors/MaterialReferenceNode.js +6 -3
  104. package/src/nodes/accessors/ModelNode.js +42 -7
  105. package/src/nodes/accessors/ModelViewProjectionNode.js +9 -5
  106. package/src/nodes/accessors/MorphNode.js +7 -3
  107. package/src/nodes/accessors/Normal.js +32 -6
  108. package/src/nodes/accessors/Object3DNode.js +11 -27
  109. package/src/nodes/accessors/PointUVNode.js +7 -3
  110. package/src/nodes/accessors/ReferenceBaseNode.js +32 -4
  111. package/src/nodes/accessors/ReferenceNode.js +40 -3
  112. package/src/nodes/accessors/RendererReferenceNode.js +9 -3
  113. package/src/nodes/accessors/SceneNode.js +7 -3
  114. package/src/nodes/accessors/SkinningNode.js +7 -3
  115. package/src/nodes/accessors/StorageBufferNode.js +21 -3
  116. package/src/nodes/accessors/StorageTextureNode.js +7 -4
  117. package/src/nodes/accessors/Texture3DNode.js +7 -4
  118. package/src/nodes/accessors/TextureNode.js +19 -8
  119. package/src/nodes/accessors/TextureSizeNode.js +8 -5
  120. package/src/nodes/accessors/UniformArrayNode.js +12 -9
  121. package/src/nodes/accessors/UserDataNode.js +9 -6
  122. package/src/nodes/accessors/VelocityNode.js +74 -23
  123. package/src/nodes/accessors/VertexColorNode.js +6 -3
  124. package/src/nodes/code/CodeNode.js +7 -3
  125. package/src/nodes/code/ExpressionNode.js +8 -4
  126. package/src/nodes/code/FunctionCallNode.js +6 -3
  127. package/src/nodes/code/FunctionNode.js +6 -3
  128. package/src/nodes/code/ScriptableNode.js +11 -6
  129. package/src/nodes/code/ScriptableValueNode.js +7 -3
  130. package/src/nodes/core/AssignNode.js +9 -6
  131. package/src/nodes/core/AttributeNode.js +7 -3
  132. package/src/nodes/core/BypassNode.js +8 -4
  133. package/src/nodes/core/CacheNode.js +8 -4
  134. package/src/nodes/core/ConstNode.js +6 -3
  135. package/src/nodes/core/ContextNode.js +7 -3
  136. package/src/nodes/core/IndexNode.js +25 -3
  137. package/src/nodes/core/InputNode.js +7 -3
  138. package/src/nodes/core/MRTNode.js +6 -3
  139. package/src/nodes/core/Node.js +10 -51
  140. package/src/nodes/core/NodeBuilder.js +71 -5
  141. package/src/nodes/core/NodeUtils.js +48 -6
  142. package/src/nodes/core/OutputStructNode.js +8 -4
  143. package/src/nodes/core/ParameterNode.js +6 -3
  144. package/src/nodes/core/PropertyNode.js +7 -3
  145. package/src/nodes/core/StackNode.js +7 -3
  146. package/src/nodes/core/StructTypeNode.js +7 -3
  147. package/src/nodes/core/TempNode.js +8 -4
  148. package/src/nodes/core/UniformGroupNode.js +10 -6
  149. package/src/nodes/core/UniformNode.js +6 -3
  150. package/src/nodes/core/VarNode.js +8 -4
  151. package/src/nodes/core/VaryingNode.js +7 -3
  152. package/src/nodes/display/AfterImageNode.js +6 -0
  153. package/src/nodes/display/AnaglyphPassNode.js +6 -0
  154. package/src/nodes/display/AnamorphicNode.js +6 -0
  155. package/src/nodes/display/BloomNode.js +6 -0
  156. package/src/nodes/display/BumpMapNode.js +6 -0
  157. package/src/nodes/display/ColorSpaceFunctions.js +4 -4
  158. package/src/nodes/display/ColorSpaceNode.js +43 -14
  159. package/src/nodes/display/DenoiseNode.js +6 -3
  160. package/src/nodes/display/DepthOfFieldNode.js +6 -3
  161. package/src/nodes/display/DotScreenNode.js +8 -5
  162. package/src/nodes/display/FXAANode.js +6 -3
  163. package/src/nodes/display/FilmNode.js +6 -3
  164. package/src/nodes/display/FrontFacingNode.js +7 -3
  165. package/src/nodes/display/GTAONode.js +6 -3
  166. package/src/nodes/display/GaussianBlurNode.js +6 -3
  167. package/src/nodes/display/Lut3DNode.js +6 -3
  168. package/src/nodes/display/NormalMapNode.js +8 -6
  169. package/src/nodes/display/ParallaxBarrierPassNode.js +8 -5
  170. package/src/nodes/display/PassNode.js +18 -7
  171. package/src/nodes/display/PixelationPassNode.js +12 -5
  172. package/src/nodes/display/PosterizeNode.js +6 -3
  173. package/src/nodes/display/RGBShiftNode.js +6 -3
  174. package/src/nodes/display/RenderOutputNode.js +12 -8
  175. package/src/nodes/display/SSAAPassNode.js +6 -3
  176. package/src/nodes/display/ScreenNode.js +181 -0
  177. package/src/nodes/display/SobelOperatorNode.js +6 -3
  178. package/src/nodes/display/StereoCompositePassNode.js +6 -3
  179. package/src/nodes/display/StereoPassNode.js +6 -3
  180. package/src/nodes/display/ToneMappingFunctions.js +12 -12
  181. package/src/nodes/display/ToneMappingNode.js +8 -7
  182. package/src/nodes/display/ToonOutlinePassNode.js +111 -0
  183. package/src/nodes/display/TransitionNode.js +6 -3
  184. package/src/nodes/display/ViewportDepthNode.js +7 -3
  185. package/src/nodes/display/ViewportDepthTextureNode.js +8 -5
  186. package/src/nodes/display/ViewportSharedTextureNode.js +8 -5
  187. package/src/nodes/display/ViewportTextureNode.js +8 -5
  188. package/src/nodes/fog/FogExp2Node.js +6 -3
  189. package/src/nodes/fog/FogNode.js +7 -3
  190. package/src/nodes/fog/FogRangeNode.js +6 -3
  191. package/src/nodes/functions/PhysicalLightingModel.js +2 -2
  192. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  193. package/src/nodes/geometry/RangeNode.js +7 -3
  194. package/src/nodes/gpgpu/AtomicFunctionNode.js +99 -0
  195. package/src/nodes/gpgpu/BarrierNode.js +40 -0
  196. package/src/nodes/gpgpu/ComputeBuiltinNode.js +98 -0
  197. package/src/nodes/gpgpu/ComputeNode.js +8 -4
  198. package/src/nodes/gpgpu/WorkgroupInfoNode.js +100 -0
  199. package/src/nodes/lighting/AONode.js +6 -3
  200. package/src/nodes/lighting/AmbientLightNode.js +6 -3
  201. package/src/nodes/lighting/AnalyticLightNode.js +198 -30
  202. package/src/nodes/lighting/BasicEnvironmentNode.js +6 -3
  203. package/src/nodes/lighting/BasicLightMapNode.js +6 -3
  204. package/src/nodes/lighting/DirectionalLightNode.js +7 -4
  205. package/src/nodes/lighting/EnvironmentNode.js +6 -3
  206. package/src/nodes/lighting/HemisphereLightNode.js +10 -6
  207. package/src/nodes/lighting/IESSpotLightNode.js +6 -3
  208. package/src/nodes/lighting/IrradianceNode.js +6 -3
  209. package/src/nodes/lighting/LightProbeNode.js +8 -31
  210. package/src/nodes/lighting/LightingContextNode.js +6 -3
  211. package/src/nodes/lighting/LightingNode.js +7 -3
  212. package/src/nodes/lighting/LightsNode.js +24 -5
  213. package/src/nodes/lighting/PointLightNode.js +11 -7
  214. package/src/nodes/lighting/RectAreaLightNode.js +11 -7
  215. package/src/nodes/lighting/SpotLightNode.js +13 -10
  216. package/src/nodes/math/ConditionalNode.js +23 -6
  217. package/src/nodes/math/MathNode.js +6 -3
  218. package/src/nodes/math/OperatorNode.js +6 -3
  219. package/src/nodes/pmrem/PMREMNode.js +6 -3
  220. package/src/nodes/utils/ArrayElementNode.js +8 -4
  221. package/src/nodes/utils/ConvertNode.js +7 -3
  222. package/src/nodes/utils/CubeMapNode.js +6 -3
  223. package/src/nodes/utils/EquirectUVNode.js +6 -3
  224. package/src/nodes/utils/FlipNode.js +7 -4
  225. package/src/nodes/utils/FunctionOverloadingNode.js +7 -3
  226. package/src/nodes/utils/JoinNode.js +6 -3
  227. package/src/nodes/utils/LoopNode.js +7 -3
  228. package/src/nodes/utils/MatcapUVNode.js +6 -3
  229. package/src/nodes/utils/MaxMipLevelNode.js +6 -3
  230. package/src/nodes/utils/OscNode.js +7 -3
  231. package/src/nodes/utils/RTTNode.js +6 -3
  232. package/src/nodes/utils/ReflectorNode.js +8 -5
  233. package/src/nodes/utils/RemapNode.js +7 -3
  234. package/src/nodes/utils/RotateNode.js +6 -3
  235. package/src/nodes/utils/SetNode.js +7 -4
  236. package/src/nodes/utils/SplitNode.js +7 -3
  237. package/src/nodes/utils/SpriteSheetUVNode.js +7 -3
  238. package/src/nodes/utils/StorageArrayElementNode.js +9 -8
  239. package/src/nodes/utils/TimerNode.js +6 -3
  240. package/src/nodes/utils/TriplanarTexturesNode.js +7 -3
  241. package/src/nodes/utils/ViewportUtils.js +2 -2
  242. package/src/objects/BatchedMesh.js +76 -10
  243. package/src/objects/LOD.js +21 -0
  244. package/src/objects/Line.js +1 -0
  245. package/src/objects/Mesh.js +7 -23
  246. package/src/objects/Points.js +2 -0
  247. package/src/renderers/WebGLRenderer.js +64 -41
  248. package/src/renderers/common/BundleGroup.js +26 -0
  249. package/src/renderers/common/ClippingContext.js +4 -3
  250. package/src/renderers/common/RenderContext.js +4 -5
  251. package/src/renderers/common/RenderObject.js +116 -5
  252. package/src/renderers/common/RenderObjects.js +8 -1
  253. package/src/renderers/common/Renderer.js +57 -49
  254. package/src/renderers/common/extras/PMREMGenerator.js +7 -9
  255. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  256. package/src/renderers/common/nodes/Nodes.js +33 -14
  257. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  258. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  259. package/src/renderers/webgl/WebGLCapabilities.js +9 -0
  260. package/src/renderers/webgl/WebGLProgram.js +2 -0
  261. package/src/renderers/webgl/WebGLPrograms.js +21 -17
  262. package/src/renderers/webgl/WebGLState.js +21 -0
  263. package/src/renderers/webgl/WebGLTextures.js +22 -0
  264. package/src/renderers/webgl-fallback/WebGLBackend.js +50 -45
  265. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +4 -4
  266. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +6 -0
  267. package/src/renderers/webgl-fallback/utils/WebGLState.js +1 -4
  268. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +61 -16
  269. package/src/renderers/webgpu/WebGPUBackend.js +33 -25
  270. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +42 -0
  271. package/src/renderers/webgpu/WebGPURenderer.js +5 -2
  272. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +59 -0
  273. package/src/renderers/{common → webgpu}/nodes/StandardNodeLibrary.js +11 -11
  274. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +91 -11
  275. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +6 -16
  276. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +1 -1
  277. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +7 -5
  278. package/src/renderers/webgpu/utils/WebGPUUtils.js +1 -1
  279. package/src/utils.js +33 -1
  280. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  281. package/examples/jsm/loaders/TiltLoader.js +0 -520
  282. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  283. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  284. package/src/nodes/display/ViewportNode.js +0 -138
  285. package/src/nodes/lighting/LightNode.js +0 -57
  286. package/src/renderers/common/StandardRenderer.js +0 -18
@@ -5,6 +5,7 @@ import {
5
5
  BufferGeometry,
6
6
  ClampToEdgeWrapping,
7
7
  Color,
8
+ ColorManagement,
8
9
  DirectionalLight,
9
10
  EquirectangularReflectionMapping,
10
11
  Euler,
@@ -23,13 +24,14 @@ import {
23
24
  MeshPhongMaterial,
24
25
  NumberKeyframeTrack,
25
26
  Object3D,
26
- OrthographicCamera,
27
27
  PerspectiveCamera,
28
28
  PointLight,
29
29
  PropertyBinding,
30
30
  Quaternion,
31
31
  QuaternionKeyframeTrack,
32
32
  RepeatWrapping,
33
+ SRGBColorSpace,
34
+ ShapeUtils,
33
35
  Skeleton,
34
36
  SkinnedMesh,
35
37
  SpotLight,
@@ -39,10 +41,9 @@ import {
39
41
  Vector2,
40
42
  Vector3,
41
43
  Vector4,
42
- VectorKeyframeTrack,
43
- SRGBColorSpace,
44
- ShapeUtils
44
+ VectorKeyframeTrack
45
45
  } from 'three';
46
+
46
47
  import * as fflate from '../libs/fflate.module.js';
47
48
  import { NURBSCurve } from '../curves/NURBSCurve.js';
48
49
 
@@ -538,12 +539,12 @@ class FBXTreeParser {
538
539
 
539
540
  if ( materialNode.Diffuse ) {
540
541
 
541
- parameters.color = new Color().fromArray( materialNode.Diffuse.value ).convertSRGBToLinear();
542
+ parameters.color = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.Diffuse.value ), SRGBColorSpace );
542
543
 
543
544
  } else if ( materialNode.DiffuseColor && ( materialNode.DiffuseColor.type === 'Color' || materialNode.DiffuseColor.type === 'ColorRGB' ) ) {
544
545
 
545
546
  // The blender exporter exports diffuse here instead of in materialNode.Diffuse
546
- parameters.color = new Color().fromArray( materialNode.DiffuseColor.value ).convertSRGBToLinear();
547
+ parameters.color = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.DiffuseColor.value ), SRGBColorSpace );
547
548
 
548
549
  }
549
550
 
@@ -555,12 +556,12 @@ class FBXTreeParser {
555
556
 
556
557
  if ( materialNode.Emissive ) {
557
558
 
558
- parameters.emissive = new Color().fromArray( materialNode.Emissive.value ).convertSRGBToLinear();
559
+ parameters.emissive = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.Emissive.value ), SRGBColorSpace );
559
560
 
560
561
  } else if ( materialNode.EmissiveColor && ( materialNode.EmissiveColor.type === 'Color' || materialNode.EmissiveColor.type === 'ColorRGB' ) ) {
561
562
 
562
563
  // The blender exporter exports emissive color here instead of in materialNode.Emissive
563
- parameters.emissive = new Color().fromArray( materialNode.EmissiveColor.value ).convertSRGBToLinear();
564
+ parameters.emissive = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.EmissiveColor.value ), SRGBColorSpace );
564
565
 
565
566
  }
566
567
 
@@ -596,12 +597,12 @@ class FBXTreeParser {
596
597
 
597
598
  if ( materialNode.Specular ) {
598
599
 
599
- parameters.specular = new Color().fromArray( materialNode.Specular.value ).convertSRGBToLinear();
600
+ parameters.specular = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.Specular.value ), SRGBColorSpace );
600
601
 
601
602
  } else if ( materialNode.SpecularColor && materialNode.SpecularColor.type === 'Color' ) {
602
603
 
603
604
  // The blender exporter exports specular color here instead of in materialNode.Specular
604
- parameters.specular = new Color().fromArray( materialNode.SpecularColor.value ).convertSRGBToLinear();
605
+ parameters.specular = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.SpecularColor.value ), SRGBColorSpace );
605
606
 
606
607
  }
607
608
 
@@ -1094,7 +1095,8 @@ class FBXTreeParser {
1094
1095
  break;
1095
1096
 
1096
1097
  case 1: // Orthographic
1097
- model = new OrthographicCamera( - width / 2, width / 2, height / 2, - height / 2, nearClippingPlane, farClippingPlane );
1098
+ console.warn( 'THREE.FBXLoader: Orthographic cameras not supported yet.' );
1099
+ model = new Object3D();
1098
1100
  break;
1099
1101
 
1100
1102
  default:
@@ -1151,7 +1153,7 @@ class FBXTreeParser {
1151
1153
 
1152
1154
  if ( lightAttribute.Color !== undefined ) {
1153
1155
 
1154
- color = new Color().fromArray( lightAttribute.Color.value ).convertSRGBToLinear();
1156
+ color = ColorManagement.toWorkingColorSpace( new Color().fromArray( lightAttribute.Color.value ), SRGBColorSpace );
1155
1157
 
1156
1158
  }
1157
1159
 
@@ -1329,7 +1331,7 @@ class FBXTreeParser {
1329
1331
  if ( 'InheritType' in modelNode ) transformData.inheritType = parseInt( modelNode.InheritType.value );
1330
1332
 
1331
1333
  if ( 'RotationOrder' in modelNode ) transformData.eulerOrder = getEulerOrder( modelNode.RotationOrder.value );
1332
- else transformData.eulerOrder = 'ZYX';
1334
+ else transformData.eulerOrder = getEulerOrder( 0 );
1333
1335
 
1334
1336
  if ( 'Lcl_Translation' in modelNode ) transformData.translation = modelNode.Lcl_Translation.value;
1335
1337
 
@@ -1477,7 +1479,7 @@ class FBXTreeParser {
1477
1479
 
1478
1480
  if ( r !== 0 || g !== 0 || b !== 0 ) {
1479
1481
 
1480
- const color = new Color( r, g, b ).convertSRGBToLinear();
1482
+ const color = new Color().setRGB( r, g, b, SRGBColorSpace );
1481
1483
  sceneGraph.add( new AmbientLight( color, 1 ) );
1482
1484
 
1483
1485
  }
@@ -2319,7 +2321,9 @@ class GeometryParser {
2319
2321
 
2320
2322
  for ( let i = 0, c = new Color(); i < buffer.length; i += 4 ) {
2321
2323
 
2322
- c.fromArray( buffer, i ).convertSRGBToLinear().toArray( buffer, i );
2324
+ c.fromArray( buffer, i );
2325
+ ColorManagement.toWorkingColorSpace( c, SRGBColorSpace );
2326
+ c.toArray( buffer, i );
2323
2327
 
2324
2328
  }
2325
2329
 
@@ -2809,10 +2813,13 @@ class AnimationParser {
2809
2813
 
2810
2814
  }
2811
2815
 
2816
+ // For Maya models using "Joint Orient", Euler order only applies to rotation, not pre/post-rotations
2817
+ const defaultEulerOrder = getEulerOrder( 0 );
2818
+
2812
2819
  if ( preRotation !== undefined ) {
2813
2820
 
2814
2821
  preRotation = preRotation.map( MathUtils.degToRad );
2815
- preRotation.push( eulerOrder );
2822
+ preRotation.push( defaultEulerOrder );
2816
2823
 
2817
2824
  preRotation = new Euler().fromArray( preRotation );
2818
2825
  preRotation = new Quaternion().setFromEuler( preRotation );
@@ -2822,7 +2829,7 @@ class AnimationParser {
2822
2829
  if ( postRotation !== undefined ) {
2823
2830
 
2824
2831
  postRotation = postRotation.map( MathUtils.degToRad );
2825
- postRotation.push( eulerOrder );
2832
+ postRotation.push( defaultEulerOrder );
2826
2833
 
2827
2834
  postRotation = new Euler().fromArray( postRotation );
2828
2835
  postRotation = new Quaternion().setFromEuler( postRotation ).invert();
@@ -4134,10 +4141,13 @@ function generateTransform( transformData ) {
4134
4141
 
4135
4142
  if ( transformData.translation ) lTranslationM.setPosition( tempVec.fromArray( transformData.translation ) );
4136
4143
 
4144
+ // For Maya models using "Joint Orient", Euler order only applies to rotation, not pre/post-rotations
4145
+ const defaultEulerOrder = getEulerOrder( 0 );
4146
+
4137
4147
  if ( transformData.preRotation ) {
4138
4148
 
4139
4149
  const array = transformData.preRotation.map( MathUtils.degToRad );
4140
- array.push( transformData.eulerOrder || Euler.DEFAULT_ORDER );
4150
+ array.push( defaultEulerOrder );
4141
4151
  lPreRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );
4142
4152
 
4143
4153
  }
@@ -4145,7 +4155,7 @@ function generateTransform( transformData ) {
4145
4155
  if ( transformData.rotation ) {
4146
4156
 
4147
4157
  const array = transformData.rotation.map( MathUtils.degToRad );
4148
- array.push( transformData.eulerOrder || Euler.DEFAULT_ORDER );
4158
+ array.push( transformData.eulerOrder || defaultEulerOrder );
4149
4159
  lRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );
4150
4160
 
4151
4161
  }
@@ -4153,7 +4163,7 @@ function generateTransform( transformData ) {
4153
4163
  if ( transformData.postRotation ) {
4154
4164
 
4155
4165
  const array = transformData.postRotation.map( MathUtils.degToRad );
4156
- array.push( transformData.eulerOrder || Euler.DEFAULT_ORDER );
4166
+ array.push( defaultEulerOrder );
4157
4167
  lPostRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );
4158
4168
  lPostRotationM.invert();
4159
4169
 
@@ -267,16 +267,6 @@ class GLTFLoader extends Loader {
267
267
 
268
268
  }
269
269
 
270
- setDDSLoader() {
271
-
272
- throw new Error(
273
-
274
- 'THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".'
275
-
276
- );
277
-
278
- }
279
-
280
270
  setKTX2Loader( ktx2Loader ) {
281
271
 
282
272
  this.ktx2Loader = ktx2Loader;
@@ -3153,6 +3143,9 @@ class GLTFParser {
3153
3143
 
3154
3144
  }
3155
3145
 
3146
+ // Ignore normalized since we copy from sparse
3147
+ bufferAttribute.normalized = false;
3148
+
3156
3149
  for ( let i = 0, il = sparseIndices.length; i < il; i ++ ) {
3157
3150
 
3158
3151
  const index = sparseIndices[ i ];
@@ -3165,6 +3158,8 @@ class GLTFParser {
3165
3158
 
3166
3159
  }
3167
3160
 
3161
+ bufferAttribute.normalized = normalized;
3162
+
3168
3163
  }
3169
3164
 
3170
3165
  return bufferAttribute;
@@ -9,6 +9,7 @@
9
9
  * References:
10
10
  * - KTX: http://github.khronos.org/KTX-Specification/
11
11
  * - DFD: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor
12
+ * - BasisU HDR: https://github.com/BinomialLLC/basis_universal/wiki/UASTC-HDR-Texture-Specification-v1.0
12
13
  */
13
14
 
14
15
  import {
@@ -63,6 +64,7 @@ import {
63
64
  VK_FORMAT_R8G8_UNORM,
64
65
  VK_FORMAT_R8G8B8A8_SRGB,
65
66
  VK_FORMAT_R8G8B8A8_UNORM,
67
+ VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT,
66
68
  VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
67
69
  VK_FORMAT_ASTC_6x6_UNORM_BLOCK,
68
70
  KHR_DF_PRIMARIES_UNSPECIFIED,
@@ -251,7 +253,7 @@ class KTX2Loader extends Loader {
251
253
 
252
254
  loader.load( url, ( buffer ) => {
253
255
 
254
- this.parse( buffer, onLoad, onError);
256
+ this.parse( buffer, onLoad, onError );
255
257
 
256
258
  }, onProgress, onError );
257
259
 
@@ -269,15 +271,15 @@ class KTX2Loader extends Loader {
269
271
  // again from this thread.
270
272
  if ( _taskCache.has( buffer ) ) {
271
273
 
272
- const cachedTask = _taskCache.get( buffer );
274
+ const cachedTask = _taskCache.get( buffer );
273
275
 
274
- return cachedTask.promise.then( onLoad ).catch( onError );
276
+ return cachedTask.promise.then( onLoad ).catch( onError );
275
277
 
276
278
  }
277
279
 
278
280
  this._createTexture( buffer )
279
- .then( ( texture ) => onLoad ? onLoad( texture ) : null )
280
- .catch( onError );
281
+ .then( ( texture ) => onLoad ? onLoad( texture ) : null )
282
+ .catch( onError );
281
283
 
282
284
  }
283
285
 
@@ -730,8 +732,7 @@ KTX2Loader.BasisWorker = function () {
730
732
 
731
733
  };
732
734
 
733
- //
734
- // Parsing for non-Basis textures. These textures are may have supercompression
735
+ // Parsing for non-Basis textures. These textures may have supercompression
735
736
  // like Zstd, but they do not require transcoding.
736
737
 
737
738
  const UNCOMPRESSED_FORMATS = new Set( [ RGBAFormat, RGFormat, RedFormat ] );
@@ -753,6 +754,7 @@ const FORMAT_MAP = {
753
754
  [ VK_FORMAT_R8_SRGB ]: RedFormat,
754
755
  [ VK_FORMAT_R8_UNORM ]: RedFormat,
755
756
 
757
+ [ VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT ]: RGBA_ASTC_4x4_Format,
756
758
  [ VK_FORMAT_ASTC_6x6_SRGB_BLOCK ]: RGBA_ASTC_6x6_Format,
757
759
  [ VK_FORMAT_ASTC_6x6_UNORM_BLOCK ]: RGBA_ASTC_6x6_Format,
758
760
 
@@ -775,6 +777,7 @@ const TYPE_MAP = {
775
777
  [ VK_FORMAT_R8_SRGB ]: UnsignedByteType,
776
778
  [ VK_FORMAT_R8_UNORM ]: UnsignedByteType,
777
779
 
780
+ [ VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT ]: HalfFloatType,
778
781
  [ VK_FORMAT_ASTC_6x6_SRGB_BLOCK ]: UnsignedByteType,
779
782
  [ VK_FORMAT_ASTC_6x6_UNORM_BLOCK ]: UnsignedByteType,
780
783
 
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  Color,
3
+ ColorManagement,
3
4
  DefaultLoadingManager,
4
5
  FileLoader,
5
6
  FrontSide,
@@ -384,21 +385,21 @@ class MaterialCreator {
384
385
 
385
386
  // Diffuse color (color under white light) using RGB values
386
387
 
387
- params.color = new Color().fromArray( value ).convertSRGBToLinear();
388
+ params.color = ColorManagement.toWorkingColorSpace( new Color().fromArray( value ), SRGBColorSpace );
388
389
 
389
390
  break;
390
391
 
391
392
  case 'ks':
392
393
 
393
394
  // Specular color (color when light is reflected from shiny surface) using RGB values
394
- params.specular = new Color().fromArray( value ).convertSRGBToLinear();
395
+ params.specular = ColorManagement.toWorkingColorSpace( new Color().fromArray( value ), SRGBColorSpace );
395
396
 
396
397
  break;
397
398
 
398
399
  case 'ke':
399
400
 
400
401
  // Emissive using RGB values
401
- params.emissive = new Color().fromArray( value ).convertSRGBToLinear();
402
+ params.emissive = ColorManagement.toWorkingColorSpace( new Color().fromArray( value ), SRGBColorSpace );
402
403
 
403
404
  break;
404
405
 
@@ -7,7 +7,7 @@ import {
7
7
  add, sub, mul, div, mod, abs, sign, floor, ceil, round, pow, sin, cos, tan,
8
8
  asin, acos, atan2, sqrt, exp, clamp, min, max, normalize, length, dot, cross, normalMap,
9
9
  remap, smoothstep, luminance, mx_rgbtohsv, mx_hsvtorgb,
10
- mix,
10
+ mix, split,
11
11
  mx_ramplr, mx_ramptb, mx_splitlr, mx_splittb,
12
12
  mx_fractal_noise_float, mx_noise_float, mx_cell_noise_float, mx_worley_noise_float,
13
13
  mx_transform_uv,
@@ -44,6 +44,10 @@ const mx_power = ( in1, in2 = float( 1 ) ) => pow( in1, in2 );
44
44
  const mx_atan2 = ( in1 = float( 0 ), in2 = float( 1 ) ) => atan2( in1, in2 );
45
45
  const mx_timer = () => timerLocal();
46
46
  const mx_frame = () => frameId;
47
+ const mx_invert = ( in1, amount = float( 1 ) ) => sub( amount, in1 );
48
+
49
+ const separate = ( in1, channel ) => split( in1, channel.at( - 1 ) );
50
+ const extract = ( in1, index ) => in1.element( index );
47
51
 
48
52
  const MXElements = [
49
53
 
@@ -75,6 +79,7 @@ const MXElements = [
75
79
  new MXElement( 'magnitude', length, [ 'in1', 'in2' ] ),
76
80
  new MXElement( 'dotproduct', dot, [ 'in1', 'in2' ] ),
77
81
  new MXElement( 'crossproduct', cross, [ 'in' ] ),
82
+ new MXElement( 'invert', mx_invert, [ 'in', 'amount' ] ),
78
83
  //new MtlXElement( 'transformpoint', ... ),
79
84
  //new MtlXElement( 'transformvector', ... ),
80
85
  //new MtlXElement( 'transformnormal', ... ),
@@ -127,10 +132,10 @@ const MXElements = [
127
132
  new MXElement( 'contrast', mx_contrast, [ 'in', 'amount', 'pivot' ] ),
128
133
  //new MtlXElement( 'hsvadjust', ... ),
129
134
  new MXElement( 'saturate', saturation, [ 'in', 'amount' ] ),
130
- //new MtlXElement( 'extract', ... ),
131
- //new MtlXElement( 'separate2', ... ),
132
- //new MtlXElement( 'separate3', ... ),
133
- //new MtlXElement( 'separate4', ... )
135
+ new MXElement( 'extract', extract, [ 'in', 'index' ] ),
136
+ new MXElement( 'separate2', separate, [ 'in' ] ),
137
+ new MXElement( 'separate3', separate, [ 'in' ] ),
138
+ new MXElement( 'separate4', separate, [ 'in' ] ),
134
139
 
135
140
  new MXElement( 'time', mx_timer ),
136
141
  new MXElement( 'frame', mx_frame )
@@ -369,11 +374,11 @@ class MaterialXNode {
369
374
 
370
375
  }
371
376
 
372
- getNode() {
377
+ getNode( out = null ) {
373
378
 
374
379
  let node = this.node;
375
380
 
376
- if ( node !== null ) {
381
+ if ( node !== null && out === null ) {
377
382
 
378
383
  return node;
379
384
 
@@ -391,7 +396,13 @@ class MaterialXNode {
391
396
 
392
397
  } else if ( this.hasReference ) {
393
398
 
394
- node = this.materialX.getMaterialXNode( this.referencePath ).getNode();
399
+ if ( this.element === 'output' && this.output && out === null ) {
400
+
401
+ out = this.output;
402
+
403
+ }
404
+
405
+ node = this.materialX.getMaterialXNode( this.referencePath ).getNode( out );
395
406
 
396
407
  } else {
397
408
 
@@ -474,7 +485,15 @@ class MaterialXNode {
474
485
 
475
486
  const nodeElement = MtlXLibrary[ element ];
476
487
 
477
- node = nodeElement.nodeFunc( ...this.getNodesByNames( ...nodeElement.params ) );
488
+ if ( out !== null ) {
489
+
490
+ node = nodeElement.nodeFunc( ...this.getNodesByNames( ...nodeElement.params ), out );
491
+
492
+ } else {
493
+
494
+ node = nodeElement.nodeFunc( ...this.getNodesByNames( ...nodeElement.params ) );
495
+
496
+ }
478
497
 
479
498
  }
480
499
 
@@ -542,7 +561,7 @@ class MaterialXNode {
542
561
 
543
562
  const child = this.getChildByName( name );
544
563
 
545
- return child ? child.getNode() : undefined;
564
+ return child ? child.getNode( child.output ) : undefined;
546
565
 
547
566
  }
548
567
 
@@ -12,7 +12,8 @@ import {
12
12
  Points,
13
13
  PointsMaterial,
14
14
  Vector3,
15
- Color
15
+ Color,
16
+ SRGBColorSpace
16
17
  } from 'three';
17
18
 
18
19
  // o object_name | g group_name
@@ -534,8 +535,9 @@ class OBJLoader extends Loader {
534
535
  _color.setRGB(
535
536
  parseFloat( data[ 4 ] ),
536
537
  parseFloat( data[ 5 ] ),
537
- parseFloat( data[ 6 ] )
538
- ).convertSRGBToLinear();
538
+ parseFloat( data[ 6 ] ),
539
+ SRGBColorSpace
540
+ );
539
541
 
540
542
  state.colors.push( _color.r, _color.g, _color.b );
541
543
 
@@ -6,7 +6,8 @@ import {
6
6
  Int32BufferAttribute,
7
7
  Loader,
8
8
  Points,
9
- PointsMaterial
9
+ PointsMaterial,
10
+ SRGBColorSpace
10
11
  } from 'three';
11
12
 
12
13
  class PCDLoader extends Loader {
@@ -279,7 +280,7 @@ class PCDLoader extends Loader {
279
280
  const g = ( ( rgb >> 8 ) & 0x0000ff ) / 255;
280
281
  const b = ( ( rgb >> 0 ) & 0x0000ff ) / 255;
281
282
 
282
- c.set( r, g, b ).convertSRGBToLinear();
283
+ c.setRGB( r, g, b, SRGBColorSpace );
283
284
 
284
285
  color.push( c.r, c.g, c.b );
285
286
 
@@ -346,7 +347,7 @@ class PCDLoader extends Loader {
346
347
  const g = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 1 ) / 255.0;
347
348
  const b = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 0 ) / 255.0;
348
349
 
349
- c.set( r, g, b ).convertSRGBToLinear();
350
+ c.setRGB( r, g, b, SRGBColorSpace );
350
351
 
351
352
  color.push( c.r, c.g, c.b );
352
353
 
@@ -404,7 +405,7 @@ class PCDLoader extends Loader {
404
405
  const g = dataview.getUint8( row + offset.rgb + 1 ) / 255.0;
405
406
  const b = dataview.getUint8( row + offset.rgb + 0 ) / 255.0;
406
407
 
407
- c.set( r, g, b ).convertSRGBToLinear();
408
+ c.setRGB( r, g, b, SRGBColorSpace );
408
409
 
409
410
  color.push( c.r, c.g, c.b );
410
411
 
@@ -3,7 +3,8 @@ import {
3
3
  FileLoader,
4
4
  Float32BufferAttribute,
5
5
  Loader,
6
- Color
6
+ Color,
7
+ SRGBColorSpace
7
8
  } from 'three';
8
9
 
9
10
  class PDBLoader extends Loader {
@@ -131,7 +132,7 @@ class PDBLoader extends Loader {
131
132
  const g = atom[ 3 ][ 1 ] / 255;
132
133
  const b = atom[ 3 ][ 2 ] / 255;
133
134
 
134
- c.set( r, g, b ).convertSRGBToLinear();
135
+ c.setRGB( r, g, b, SRGBColorSpace );
135
136
 
136
137
  colorsAtoms.push( c.r, c.g, c.b );
137
138
 
@@ -3,7 +3,8 @@ import {
3
3
  FileLoader,
4
4
  Float32BufferAttribute,
5
5
  Loader,
6
- Color
6
+ Color,
7
+ SRGBColorSpace
7
8
  } from 'three';
8
9
 
9
10
  /**
@@ -468,8 +469,9 @@ class PLYLoader extends Loader {
468
469
  _color.setRGB(
469
470
  element[ cacheEntry.attrR ] / 255.0,
470
471
  element[ cacheEntry.attrG ] / 255.0,
471
- element[ cacheEntry.attrB ] / 255.0
472
- ).convertSRGBToLinear();
472
+ element[ cacheEntry.attrB ] / 255.0,
473
+ SRGBColorSpace
474
+ );
473
475
 
474
476
  buffer.colors.push( _color.r, _color.g, _color.b );
475
477
 
@@ -516,8 +518,9 @@ class PLYLoader extends Loader {
516
518
  _color.setRGB(
517
519
  element[ cacheEntry.attrR ] / 255.0,
518
520
  element[ cacheEntry.attrG ] / 255.0,
519
- element[ cacheEntry.attrB ] / 255.0
520
- ).convertSRGBToLinear();
521
+ element[ cacheEntry.attrB ] / 255.0,
522
+ SRGBColorSpace
523
+ );
521
524
  buffer.faceVertexColors.push( _color.r, _color.g, _color.b );
522
525
  buffer.faceVertexColors.push( _color.r, _color.g, _color.b );
523
526
  buffer.faceVertexColors.push( _color.r, _color.g, _color.b );
@@ -5,7 +5,8 @@ import {
5
5
  FileLoader,
6
6
  Float32BufferAttribute,
7
7
  Loader,
8
- Vector3
8
+ Vector3,
9
+ SRGBColorSpace
9
10
  } from 'three';
10
11
 
11
12
  /**
@@ -242,7 +243,7 @@ class STLLoader extends Loader {
242
243
 
243
244
  if ( hasColors ) {
244
245
 
245
- color.set( r, g, b ).convertSRGBToLinear();
246
+ color.setRGB( r, g, b, SRGBColorSpace );
246
247
 
247
248
  colors[ componentIdx ] = color.r;
248
249
  colors[ componentIdx + 1 ] = color.g;
@@ -5,6 +5,7 @@ import {
5
5
  BufferGeometry,
6
6
  ClampToEdgeWrapping,
7
7
  Color,
8
+ ColorManagement,
8
9
  ConeGeometry,
9
10
  CylinderGeometry,
10
11
  DataTexture,
@@ -918,8 +919,7 @@ class VRMLLoader extends Loader {
918
919
 
919
920
  } else {
920
921
 
921
- skyMaterial.color.setRGB( skyColor[ 0 ], skyColor[ 1 ], skyColor[ 2 ] );
922
- skyMaterial.color.convertSRGBToLinear();
922
+ skyMaterial.color.setRGB( skyColor[ 0 ], skyColor[ 1 ], skyColor[ 2 ], SRGBColorSpace );
923
923
 
924
924
  }
925
925
 
@@ -1240,13 +1240,11 @@ class VRMLLoader extends Loader {
1240
1240
  break;
1241
1241
 
1242
1242
  case 'diffuseColor':
1243
- materialData.diffuseColor = new Color( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );
1244
- materialData.diffuseColor.convertSRGBToLinear();
1243
+ materialData.diffuseColor = new Color().setRGB( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ], SRGBColorSpace );
1245
1244
  break;
1246
1245
 
1247
1246
  case 'emissiveColor':
1248
- materialData.emissiveColor = new Color( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );
1249
- materialData.emissiveColor.convertSRGBToLinear();
1247
+ materialData.emissiveColor = new Color().setRGB( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ], SRGBColorSpace );
1250
1248
  break;
1251
1249
 
1252
1250
  case 'shininess':
@@ -1254,8 +1252,7 @@ class VRMLLoader extends Loader {
1254
1252
  break;
1255
1253
 
1256
1254
  case 'specularColor':
1257
- materialData.specularColor = new Color( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );
1258
- materialData.specularColor.convertSRGBToLinear();
1255
+ materialData.specularColor = new Color().setRGB( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ], SRGBColorSpace );
1259
1256
  break;
1260
1257
 
1261
1258
  case 'transparency':
@@ -3111,7 +3108,8 @@ class VRMLLoader extends Loader {
3111
3108
  for ( let i = 0; i < attribute.count; i ++ ) {
3112
3109
 
3113
3110
  color.fromBufferAttribute( attribute, i );
3114
- color.convertSRGBToLinear();
3111
+
3112
+ ColorManagement.toWorkingColorSpace( color, SRGBColorSpace );
3115
3113
 
3116
3114
  attribute.setXYZ( i, color.r, color.g, color.b );
3117
3115
 
@@ -3216,7 +3214,9 @@ class VRMLLoader extends Loader {
3216
3214
  const colorA = colors[ thresholdIndexA ];
3217
3215
  const colorB = colors[ thresholdIndexB ];
3218
3216
 
3219
- color.copy( colorA ).lerp( colorB, t ).convertSRGBToLinear();
3217
+ color.copy( colorA ).lerp( colorB, t );
3218
+
3219
+ ColorManagement.toWorkingColorSpace( color, SRGBColorSpace );
3220
3220
 
3221
3221
  colorAttribute.setXYZ( index, color.r, color.g, color.b );
3222
3222
 
@@ -4,7 +4,8 @@ import {
4
4
  Color,
5
5
  FileLoader,
6
6
  Float32BufferAttribute,
7
- Loader
7
+ Loader,
8
+ SRGBColorSpace
8
9
  } from 'three';
9
10
  import * as fflate from '../libs/fflate.module.js';
10
11
 
@@ -211,7 +212,7 @@ class VTKLoader extends Loader {
211
212
  const g = parseFloat( result[ 2 ] );
212
213
  const b = parseFloat( result[ 3 ] );
213
214
 
214
- color.set( r, g, b ).convertSRGBToLinear();
215
+ color.setRGB( r, g, b, SRGBColorSpace );
215
216
 
216
217
  colors.push( color.r, color.g, color.b );
217
218
 
@@ -325,7 +326,7 @@ class VTKLoader extends Loader {
325
326
  const g = colors[ 3 * i + 1 ];
326
327
  const b = colors[ 3 * i + 2 ];
327
328
 
328
- color.set( r, g, b ).convertSRGBToLinear();
329
+ color.setRGB( r, g, b, SRGBColorSpace );
329
330
 
330
331
  newColors.push( color.r, color.g, color.b );
331
332
  newColors.push( color.r, color.g, color.b );
@@ -3,7 +3,8 @@ import {
3
3
  Color,
4
4
  FileLoader,
5
5
  Float32BufferAttribute,
6
- Loader
6
+ Loader,
7
+ SRGBColorSpace
7
8
  } from 'three';
8
9
 
9
10
  class XYZLoader extends Loader {
@@ -80,7 +81,7 @@ class XYZLoader extends Loader {
80
81
  const g = parseFloat( lineValues[ 4 ] ) / 255;
81
82
  const b = parseFloat( lineValues[ 5 ] ) / 255;
82
83
 
83
- color.set( r, g, b ).convertSRGBToLinear();
84
+ color.setRGB( r, g, b, SRGBColorSpace );
84
85
 
85
86
  colors.push( color.r, color.g, color.b );
86
87
 
@@ -115,7 +115,7 @@ class FixedTimer extends Timer {
115
115
 
116
116
  function now() {
117
117
 
118
- return ( typeof performance === 'undefined' ? Date : performance ).now();
118
+ return performance.now();
119
119
 
120
120
  }
121
121