|  | 
| 4 | 4 | #include "Engine/Texture.h" | 
| 5 | 5 | #include "Engine/Texture2DArray.h" | 
| 6 | 6 | #include "Kismet2/BlueprintEditorUtils.h" | 
|  | 7 | +#include "MaterialDomain.h" | 
| 7 | 8 | #include "MaterialEditor/Public/MaterialEditingLibrary.h" | 
| 8 | 9 | #include "MaterialGraph/MaterialGraphNode_Comment.h" | 
| 9 | 10 | #include "Materials/Material.h" | 
| @@ -664,20 +665,55 @@ void DisconnectIfExpressionMissing(FExpressionInput& Input, UMaterial* Material) | 
| 664 | 665 | 	} | 
| 665 | 666 | } | 
| 666 | 667 | 
 | 
|  | 668 | +static bool PreferEmissiveColor(EMaterialDomain Domain) { | 
|  | 669 | +	return Domain == EMaterialDomain::MD_PostProcess || Domain == EMaterialDomain::MD_UI; | 
|  | 670 | +} | 
|  | 671 | + | 
| 667 | 672 | void UMaterialGenerator::TryConnectBasicMaterialPins(UMaterial* Material) { | 
| 668 | 673 | 	FExpressionInput& BaseColorInput = Material->GetEditorOnlyData()->BaseColor; | 
| 669 | 674 | 	FExpressionInput& NormalInput = Material->GetEditorOnlyData()->Normal; | 
|  | 675 | +	FExpressionInput& EmissiveColorInput = Material->GetEditorOnlyData()->EmissiveColor; | 
| 670 | 676 | 
 | 
| 671 | 677 | 	DisconnectIfExpressionMissing(BaseColorInput, Material); | 
| 672 | 678 | 	DisconnectIfExpressionMissing(NormalInput, Material); | 
|  | 679 | +	DisconnectIfExpressionMissing(EmissiveColorInput, Material); | 
|  | 680 | + | 
|  | 681 | +	if (Material->MaterialDomain == EMaterialDomain::MD_PostProcess) { | 
|  | 682 | +		const FVector2D NodePos = FVector2D(Material->EditorX - 384, Material->EditorY); | 
|  | 683 | +		// This terribleness is necessary because UMaterialExpressionSceneTexture | 
|  | 684 | +		// is not exported at all, so there is no way to use the type directly... | 
|  | 685 | +		UPackage* EngineScriptPackage = UEngine::StaticClass()->GetOuterUPackage(); | 
|  | 686 | +		TSubclassOf<UMaterialExpression> SceneTextureExpressionClass = FindObjectChecked<UClass>(EngineScriptPackage, TEXT("MaterialExpressionSceneTexture")); | 
|  | 687 | +		UMaterialExpression* SceneTextureExpression = SpawnMaterialExpression<UMaterialExpression>(Material, NodePos, SceneTextureExpressionClass); | 
|  | 688 | +		if (FByteProperty* Prop = CastField<FByteProperty>(SceneTextureExpressionClass->FindPropertyByName(TEXT("SceneTextureId")))) { | 
|  | 689 | +			if (uint8* ValuePtr = Prop->ContainerPtrToValuePtr<uint8>(SceneTextureExpression)) { | 
|  | 690 | +				*ValuePtr = PPI_PostProcessInput0; | 
|  | 691 | +			} else { | 
|  | 692 | +				fgcheckf(0, TEXT("bad ValuePtr")); | 
|  | 693 | +			} | 
|  | 694 | +		} else { | 
|  | 695 | +			fgcheckf(0, TEXT("bad Prop")); | 
|  | 696 | +		} | 
|  | 697 | +		EmissiveColorInput.Connect(0, SceneTextureExpression); | 
|  | 698 | +		return; | 
|  | 699 | +	} | 
|  | 700 | + | 
|  | 701 | +	FExpressionInput& ColorInput = PreferEmissiveColor(Material->MaterialDomain) ? EmissiveColorInput : BaseColorInput; | 
| 673 | 702 | 
 | 
| 674 | 703 | 	for (UMaterialExpression* Expression : Material->GetExpressions()) { | 
| 675 | 704 | 		if (UMaterialExpressionTextureSample* TextureSample = Cast<UMaterialExpressionTextureSample>(Expression)) { | 
| 676 |  | -			if ((TextureSample->SamplerType == SAMPLERTYPE_Color || TextureSample->SamplerType == SAMPLERTYPE_LinearColor) && !BaseColorInput.IsConnected()) { | 
| 677 |  | -				BaseColorInput.Connect(0, TextureSample); | 
| 678 |  | -			} | 
| 679 |  | -			else if (TextureSample->SamplerType == SAMPLERTYPE_Normal && !NormalInput.IsConnected()) { | 
| 680 |  | -				NormalInput.Connect(0, TextureSample); | 
|  | 705 | +			switch (TextureSample->SamplerType) { | 
|  | 706 | +			case SAMPLERTYPE_Color: | 
|  | 707 | +			case SAMPLERTYPE_LinearColor: | 
|  | 708 | +				if (!ColorInput.IsConnected()) { | 
|  | 709 | +					ColorInput.Connect(0, TextureSample); | 
|  | 710 | +				} | 
|  | 711 | +				break; | 
|  | 712 | +			case SAMPLERTYPE_Normal: | 
|  | 713 | +				if (!NormalInput.IsConnected()) { | 
|  | 714 | +					NormalInput.Connect(0, TextureSample); | 
|  | 715 | +				} | 
|  | 716 | +				break; | 
| 681 | 717 | 			} | 
| 682 | 718 | 		} | 
| 683 | 719 | 	} | 
|  | 
0 commit comments