Jelajahi Sumber

MMDLoader: Apply color management to textures. (#26554)

Don McCurdy 2 tahun lalu
induk
melakukan
5c638c4d7b
1 mengubah file dengan 10 tambahan dan 7 penghapusan
  1. 10 7
      examples/jsm/loaders/MMDLoader.js

+ 10 - 7
examples/jsm/loaders/MMDLoader.js

@@ -27,6 +27,7 @@ import {
 	Skeleton,
 	Skeleton,
 	SkinnedMesh,
 	SkinnedMesh,
 	SrcAlphaFactor,
 	SrcAlphaFactor,
+	SRGBColorSpace,
 	TextureLoader,
 	TextureLoader,
 	Uint16BufferAttribute,
 	Uint16BufferAttribute,
 	Vector3,
 	Vector3,
@@ -1133,17 +1134,18 @@ class MaterialBuilder {
 				 * MMDToonMaterial doesn't have ambient. Set it to emissive instead.
 				 * MMDToonMaterial doesn't have ambient. Set it to emissive instead.
 				 * It'll be too bright if material has map texture so using coef 0.2.
 				 * It'll be too bright if material has map texture so using coef 0.2.
 				 */
 				 */
-			params.diffuse = new Color().fromArray( material.diffuse );
+			params.diffuse = new Color().setRGB(
+				material.diffuse[ 0 ],
+				material.diffuse[ 1 ],
+				material.diffuse[ 2 ],
+				SRGBColorSpace
+			);
 			params.opacity = material.diffuse[ 3 ];
 			params.opacity = material.diffuse[ 3 ];
-			params.specular = new Color().fromArray( material.specular );
+			params.specular = new Color().setRGB( ...material.specular, SRGBColorSpace );
 			params.shininess = material.shininess;
 			params.shininess = material.shininess;
-			params.emissive = new Color().fromArray( material.ambient );
+			params.emissive = new Color().setRGB( ...material.ambient, SRGBColorSpace );
 			params.transparent = params.opacity !== 1.0;
 			params.transparent = params.opacity !== 1.0;
 
 
-			params.diffuse.convertSRGBToLinear();
-			params.specular.convertSRGBToLinear();
-			params.emissive.convertSRGBToLinear();
-
 			//
 			//
 
 
 			params.fog = true;
 			params.fog = true;
@@ -1452,6 +1454,7 @@ class MaterialBuilder {
 			t.flipY = false;
 			t.flipY = false;
 			t.wrapS = RepeatWrapping;
 			t.wrapS = RepeatWrapping;
 			t.wrapT = RepeatWrapping;
 			t.wrapT = RepeatWrapping;
+			t.colorSpace = SRGBColorSpace;
 
 
 			for ( let i = 0; i < texture.readyCallbacks.length; i ++ ) {
 			for ( let i = 0; i < texture.readyCallbacks.length; i ++ ) {