Просмотр исходного кода

Merge pull request #10693 from bhouston/ue4SubstanceCompatibility

UE4-Substance compatibility: combined OcclusionRoughnessMetalness map support.
Mr.doob 8 лет назад
Родитель
Сommit
18089120ca

BIN
examples/models/obj/cerberus/Cerberus_RM.jpg


+ 2 - 2
examples/webgl_materials_standard.html

@@ -126,8 +126,8 @@
 					material.metalness = 1;
 
 					material.map = loader.load( path + 'Cerberus_A.jpg' );
-					material.roughnessMap = loader.load( path + 'Cerberus_R.jpg' );
-					material.metalnessMap = loader.load( path + 'Cerberus_M.jpg' );
+					// roughness is in G channel, metalness is in B channel 
+					material.metalnessMap = material.roughnessMap = loader.load( path + 'Cerberus_RM.jpg' );
 					material.normalMap = loader.load( path + 'Cerberus_N.jpg' );
 
 					material.map.wrapS = THREE.RepeatWrapping;

+ 1 - 0
src/renderers/shaders/ShaderChunk/aomap_fragment.glsl

@@ -1,5 +1,6 @@
 #ifdef USE_AOMAP
 
+	// reads channel R, compatible with a combined OcclusionRoughnessMetallic (RGB) texture
 	float ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;
 
 	reflectedLight.indirectDiffuse *= ambientOcclusion;

+ 3 - 1
src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl

@@ -3,6 +3,8 @@ float metalnessFactor = metalness;
 #ifdef USE_METALNESSMAP
 
 	vec4 texelMetalness = texture2D( metalnessMap, vUv );
-	metalnessFactor *= texelMetalness.r;
+
+	// reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture
+	metalnessFactor *= texelMetalness.b;
 
 #endif

+ 3 - 1
src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl

@@ -3,6 +3,8 @@ float roughnessFactor = roughness;
 #ifdef USE_ROUGHNESSMAP
 
 	vec4 texelRoughness = texture2D( roughnessMap, vUv );
-	roughnessFactor *= texelRoughness.r;
+
+	// reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture
+	roughnessFactor *= texelRoughness.g;
 
 #endif