本文整理汇总了C++中UMaterial类的典型用法代码示例。如果您正苦于以下问题:C++ UMaterial类的具体用法?C++ UMaterial怎么用?C++ UMaterial使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了UMaterial类的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: ImportMaterialsForSkelMesh
/**
* Extract the material names from the Apex Render Mesh contained within an Apex Destructible Asset.
* @param ImportData - SkeletalMesh import data into which we are extracting information
* @param ApexDestructibleAsset - the Apex Destructible Asset
*/
static void ImportMaterialsForSkelMesh(FSkeletalMeshImportData &ImportData, const NxDestructibleAsset& ApexDestructibleAsset)
{
physx::PxU32 SubmeshCount = 0;
// Get the submesh count from the Destructible Asset's Render Mesh
const physx::NxRenderMeshAsset* ApexRenderMesh = ApexDestructibleAsset.getRenderMeshAsset();
if (ApexRenderMesh != NULL)
{
SubmeshCount = ApexRenderMesh->getSubmeshCount();
}
if( SubmeshCount == 0 )
{
// No material info, create a default material slot
++SubmeshCount;
UE_LOG(LogApexDestructibleAssetImport, Warning,TEXT("No material associated with skeletal mesh - using default"));
}
else
{
UE_LOG(LogApexDestructibleAssetImport, Warning,TEXT("Using default materials for material slot"));
}
// Create material slots
UMaterial* DefaultMaterial = UMaterial::GetDefaultMaterial(MD_Surface);
if (DefaultMaterial)
{
for (uint32 MatIndex = 0; MatIndex < SubmeshCount; MatIndex++)
{
ImportData.Materials.Add( VMaterial() );
ImportData.Materials.Last().Material = DefaultMaterial;
ImportData.Materials.Last().MaterialImportName = DefaultMaterial->GetName();
}
}
}
开发者ID:Codermay,项目名称:Unreal4,代码行数:40,代码来源:ApexDestructibleAssetImport.cpp
示例2: FColor
FLinearColor UMaterialGraphNode::GetNodeTitleColor() const
{
UMaterial* Material = CastChecked<UMaterialGraph>(GetGraph())->Material;
// Generate title color
FColor TitleColor = MaterialExpression->BorderColor;
TitleColor.A = 255;
if (bIsErrorExpression)
{
// Outline expressions that caused errors in red
TitleColor = FColor( 255, 0, 0 );
}
else if (bIsCurrentSearchResult)
{
TitleColor = FColor( 64, 64, 255 );
}
else if (bIsPreviewExpression)
{
// If we are currently previewing a node, its border should be the preview color.
TitleColor = FColor( 70, 100, 200 );
}
else if (UMaterial::IsParameter(MaterialExpression))
{
if (Material->HasDuplicateParameters(MaterialExpression))
{
TitleColor = FColor( 0, 255, 255 );
}
else
{
TitleColor = FColor( 0, 128, 128 );
}
}
else if (UMaterial::IsDynamicParameter(MaterialExpression))
{
if (Material->HasDuplicateDynamicParameters(MaterialExpression))
{
TitleColor = FColor( 0, 255, 255 );
}
else
{
TitleColor = FColor( 0, 128, 128 );
}
}
return FLinearColor(TitleColor);
}
开发者ID:Tigrouzen,项目名称:UnrealEngine-4,代码行数:47,代码来源:MaterialGraphNode.cpp
示例3: GetMovieSceneSequence
void FMaterialTrackEditor::AddVectorParameter( FGuid ObjectBinding, UMovieSceneMaterialTrack* MaterialTrack, FName ParameterName )
{
UMovieSceneSequence* MovieSceneSequence = GetMovieSceneSequence();
float KeyTime = GetTimeForKey( MovieSceneSequence );
UMaterial* Material = GetMaterialForTrack( ObjectBinding, MaterialTrack );
if ( Material != nullptr )
{
const FScopedTransaction Transaction( LOCTEXT( "AddVectorParameter", "Add vector parameter" ) );
FLinearColor ParameterValue;
Material->GetVectorParameterValue( ParameterName, ParameterValue );
MaterialTrack->Modify();
for ( UMovieSceneSection* Section : MaterialTrack->GetAllSections() )
{
Section->Modify();
}
MaterialTrack->AddVectorParameterKey( ParameterName, KeyTime, ParameterValue );
}
NotifyMovieSceneDataChanged();
}
开发者ID:ErwinT6,项目名称:T6Engine,代码行数:20,代码来源:MaterialTrackEditor.cpp
示例4: AddParameterMenuBuilder
TSharedRef<SWidget> FMaterialTrackEditor::OnGetAddParameterMenuContent( FGuid ObjectBinding, UMovieSceneMaterialTrack* MaterialTrack )
{
FMenuBuilder AddParameterMenuBuilder( true, nullptr );
UMaterial* Material = GetMaterialForTrack( ObjectBinding, MaterialTrack );
if ( Material != nullptr )
{
TArray<FParameterNameAndAction> ParameterNamesAndActions;
// Collect scalar parameters.
TArray<FName> ScalarParameterNames;
TArray<FGuid> ScalarParmeterGuids;
Material->GetAllScalarParameterNames( ScalarParameterNames, ScalarParmeterGuids );
for ( const FName& ScalarParameterName : ScalarParameterNames )
{
FUIAction AddParameterMenuAction( FExecuteAction::CreateSP( this, &FMaterialTrackEditor::AddScalarParameter, ObjectBinding, MaterialTrack, ScalarParameterName ) );
FParameterNameAndAction NameAndAction( ScalarParameterName, AddParameterMenuAction );
ParameterNamesAndActions.Add(NameAndAction);
}
// Collect vector parameters.
TArray<FName> VectorParameterNames;
TArray<FGuid> VectorParmeterGuids;
Material->GetAllVectorParameterNames( VectorParameterNames, VectorParmeterGuids );
for ( const FName& VectorParameterName : VectorParameterNames )
{
FUIAction AddParameterMenuAction( FExecuteAction::CreateSP( this, &FMaterialTrackEditor::AddVectorParameter, ObjectBinding, MaterialTrack, VectorParameterName ) );
FParameterNameAndAction NameAndAction( VectorParameterName, AddParameterMenuAction );
ParameterNamesAndActions.Add( NameAndAction );
}
// Sort and generate menu.
ParameterNamesAndActions.Sort();
for ( FParameterNameAndAction NameAndAction : ParameterNamesAndActions )
{
AddParameterMenuBuilder.AddMenuEntry( FText::FromName( NameAndAction.ParameterName ), FText(), FSlateIcon(), NameAndAction.Action );
}
}
return AddParameterMenuBuilder.MakeWidget();
}
开发者ID:ErwinT6,项目名称:T6Engine,代码行数:41,代码来源:MaterialTrackEditor.cpp
示例5: check
void FBufferVisualizationData::Initialize()
{
if (!bIsInitialized)
{
if (AllowDebugViewmodes())
{
check(MaterialMap.Num() == 0);
FConfigSection* MaterialSection = GConfig->GetSectionPrivate( TEXT("Engine.BufferVisualizationMaterials"), false, true, GEngineIni );
if (MaterialSection != NULL)
{
for (FConfigSection::TIterator It(*MaterialSection); It; ++It)
{
FString MaterialName;
if( FParse::Value( *It.Value().GetValue(), TEXT("Material="), MaterialName, true ) )
{
UMaterial* Material = LoadObject<UMaterial>(NULL, *MaterialName);
if (Material)
{
Material->AddToRoot();
Record& Rec = MaterialMap.Add(It.Key(), Record());
Rec.Name = It.Key().GetPlainNameString();
Rec.Material = Material;
FText DisplayName;
FParse::Value( *It.Value().GetValue(), TEXT("Name="), DisplayName, TEXT("Engine.BufferVisualizationMaterials") );
Rec.DisplayName = DisplayName;
}
}
}
}
ConfigureConsoleCommand();
}
bIsInitialized = true;
}
}
开发者ID:zhaoyizheng0930,项目名称:UnrealEngine,代码行数:39,代码来源:BufferVisualizationData.cpp
示例6: ANSI_TO_TCHAR
void UnFbx::FFbxImporter::CreateUnrealMaterial(FbxSurfaceMaterial* FbxMaterial, TArray<UMaterialInterface*>& OutMaterials, TArray<FString>& UVSets)
{
FString MaterialFullName = ANSI_TO_TCHAR(MakeName(FbxMaterial->GetName()));
// check for a 'skinXX' suffix in the material name
int32 MaterialNameLen = FCString::Strlen(*MaterialFullName) + 1;
char* MaterialNameANSI = new char[MaterialNameLen];
FCStringAnsi::Strcpy(MaterialNameANSI, MaterialNameLen, TCHAR_TO_ANSI(*MaterialFullName));
if (FCStringAnsi::Strlen(MaterialNameANSI) > 6)
{
const char* SkinXX = MaterialNameANSI + FCStringAnsi::Strlen(MaterialNameANSI) - 6;
if (FCharAnsi::ToUpper(*SkinXX) == 'S' && FCharAnsi::ToUpper(*(SkinXX+1)) == 'K' &&
FCharAnsi::ToUpper(*(SkinXX+2)) == 'I' && FCharAnsi::ToUpper(*(SkinXX+3)) == 'N')
{
if (FCharAnsi::IsDigit(*(SkinXX+4)) && FCharAnsi::IsDigit(*(SkinXX+5)))
{
// remove the 'skinXX' suffix from the material name
MaterialFullName = MaterialFullName.Left(MaterialNameLen - 7);
}
}
}
MaterialFullName = ObjectTools::SanitizeObjectName(MaterialFullName);
// Make sure we have a parent
if ( !ensure(Parent) )
{
return;
}
// set where to place the materials
FString NewPackageName = FPackageName::GetLongPackagePath(Parent->GetOutermost()->GetName()) + TEXT("/") + MaterialFullName;
NewPackageName = PackageTools::SanitizePackageName(NewPackageName);
UPackage* Package = CreatePackage(NULL, *NewPackageName);
UMaterialInterface* UnrealMaterialInterface = FindObject<UMaterialInterface>(Package,*MaterialFullName);
// does not override existing materials
if (UnrealMaterialInterface != NULL)
{
OutMaterials.Add(UnrealMaterialInterface);
return;
}
// create an unreal material asset
UMaterialFactoryNew* MaterialFactory = new UMaterialFactoryNew(FPostConstructInitializeProperties());
UMaterial* UnrealMaterial = (UMaterial*)MaterialFactory->FactoryCreateNew(
UMaterial::StaticClass(), Package, *MaterialFullName, RF_Standalone|RF_Public, NULL, GWarn );
// TODO : need this ? UnrealMaterial->bUsedWithStaticLighting = true;
if ( UnrealMaterial != NULL )
{
// Notify the asset registry
FAssetRegistryModule::AssetCreated(UnrealMaterial);
// Set the dirty flag so this package will get saved later
Package->SetDirtyFlag(true);
}
// textures and properties
CreateAndLinkExpressionForMaterialProperty( *FbxMaterial, UnrealMaterial, FbxSurfaceMaterial::sDiffuse, UnrealMaterial->DiffuseColor, false, UVSets);
CreateAndLinkExpressionForMaterialProperty( *FbxMaterial, UnrealMaterial, FbxSurfaceMaterial::sEmissive, UnrealMaterial->EmissiveColor, false, UVSets);
CreateAndLinkExpressionForMaterialProperty( *FbxMaterial, UnrealMaterial, FbxSurfaceMaterial::sSpecular, UnrealMaterial->SpecularColor, false, UVSets);
CreateAndLinkExpressionForMaterialProperty( *FbxMaterial, UnrealMaterial, FbxSurfaceMaterial::sSpecularFactor, UnrealMaterial->SpecularColor, false, UVSets); // SpecularFactor modulates the SpecularColor value if there's one
//CreateAndLinkExpressionForMaterialProperty( *FbxMaterial, UnrealMaterial, FbxSurfaceMaterial::sShininess, UnrealMaterial->SpecularPower, false, UVSets);
if (!CreateAndLinkExpressionForMaterialProperty( *FbxMaterial, UnrealMaterial, FbxSurfaceMaterial::sNormalMap, UnrealMaterial->Normal, true, UVSets))
{
CreateAndLinkExpressionForMaterialProperty( *FbxMaterial, UnrealMaterial, FbxSurfaceMaterial::sBump, UnrealMaterial->Normal, true, UVSets); // no bump in unreal, use as normal map
}
//CreateAndLinkExpressionForMaterialProperty( *FbxMaterial, UnrealMaterial, KFbxSurfaceMaterial::sTransparentColor, UnrealMaterial->Opacity, false, UVSets);
//CreateAndLinkExpressionForMaterialProperty( *FbxMaterial, UnrealMaterial, KFbxSurfaceMaterial::sTransparencyFactor, UnrealMaterial->OpacityMask, false, UVSets);
FixupMaterial( *FbxMaterial, UnrealMaterial); // add random diffuse if none exists
// compile shaders for PC (from UPrecompileShadersCommandlet::ProcessMaterial
// and FMaterialEditor::UpdateOriginalMaterial)
// make sure that any static meshes, etc using this material will stop using the FMaterialResource of the original
// material, and will use the new FMaterialResource created when we make a new UMaterial in place
FGlobalComponentReregisterContext RecreateComponents;
// let the material update itself if necessary
UnrealMaterial->PreEditChange(NULL);
UnrealMaterial->PostEditChange();
OutMaterials.Add(UnrealMaterial);
}
开发者ID:Tigrouzen,项目名称:UnrealEngine-4,代码行数:86,代码来源:FbxMaterialImport.cpp
示例7:
// ***************************************************************************
void CDriverUser::deleteMaterial(UMaterial &umat)
{
delete umat.getObjectPtr();
umat.detach();
}
开发者ID:CCChaos,项目名称:RyzomCore,代码行数:6,代码来源:driver_user2.cpp
示例8: FColor
FLinearColor UMaterialGraphNode::GetNodeTitleColor() const
{
UMaterial* Material = CastChecked<UMaterialGraph>(GetGraph())->Material;
if (bIsPreviewExpression)
{
// If we are currently previewing a node, its border should be the preview color.
return FColor( 70, 100, 200 );
}
const UGraphEditorSettings* Settings = GetDefault<UGraphEditorSettings>();
if (UsesBoolColour(MaterialExpression))
{
return Settings->BooleanPinTypeColor;
}
else if (UsesFloatColour(MaterialExpression))
{
return Settings->FloatPinTypeColor;
}
else if (UsesVectorColour(MaterialExpression))
{
return Settings->VectorPinTypeColor;
}
else if (UsesObjectColour(MaterialExpression))
{
return Settings->ObjectPinTypeColor;
}
else if (UsesEventColour(MaterialExpression))
{
return Settings->EventNodeTitleColor;
}
else if (MaterialExpression->IsA(UMaterialExpressionMaterialFunctionCall::StaticClass()))
{
// Previously FColor(0, 116, 255);
return Settings->FunctionCallNodeTitleColor;
}
else if (MaterialExpression->IsA(UMaterialExpressionFunctionOutput::StaticClass()))
{
// Previously FColor(255, 155, 0);
return Settings->ResultNodeTitleColor;
}
else if (MaterialExpression->IsA(UMaterialExpressionCustomOutput::StaticClass()))
{
// Previously FColor(255, 155, 0);
return Settings->ResultNodeTitleColor;
}
else if (UMaterial::IsParameter(MaterialExpression))
{
if (Material->HasDuplicateParameters(MaterialExpression))
{
return FColor( 0, 255, 255 );
}
else
{
return FColor( 0, 128, 128 );
}
}
else if (UMaterial::IsDynamicParameter(MaterialExpression))
{
if (Material->HasDuplicateDynamicParameters(MaterialExpression))
{
return FColor( 0, 255, 255 );
}
else
{
return FColor( 0, 128, 128 );
}
}
// Assume that most material expressions act like pure functions and don't affect anything else
return Settings->PureFunctionCallNodeTitleColor;
}
开发者ID:RandomDeveloperM,项目名称:UE4_Hairworks,代码行数:73,代码来源:MaterialGraphNode.cpp
示例9: CreateBufferStruct
void UMaterialParameterCollection::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
{
// If the array counts have changed, an element has been added or removed, and we need to update the uniform buffer layout,
// Which also requires recompiling any referencing materials
if (ScalarParameters.Num() != PreviousScalarParameters.Num()
|| VectorParameters.Num() != PreviousVectorParameters.Num())
{
// Limit the count of parameters to fit within uniform buffer limits
const uint32 MaxScalarParameters = 1024;
if (ScalarParameters.Num() > MaxScalarParameters)
{
ScalarParameters.RemoveAt(MaxScalarParameters, ScalarParameters.Num() - MaxScalarParameters);
}
const uint32 MaxVectorParameters = 1024;
if (VectorParameters.Num() > MaxVectorParameters)
{
VectorParameters.RemoveAt(MaxVectorParameters, VectorParameters.Num() - MaxVectorParameters);
}
// Generate a new Id so that unloaded materials that reference this collection will update correctly on load
StateId = FGuid::NewGuid();
// Update the uniform buffer layout
CreateBufferStruct();
// Recreate each instance of this collection
for (TObjectIterator<UWorld> It; It; ++It)
{
UWorld* CurrentWorld = *It;
CurrentWorld->AddParameterCollectionInstance(this, false);
}
// Build set of changed parameter names
TSet<FName> ParameterNames;
for (const FCollectionVectorParameter& Param : PreviousVectorParameters)
{
ParameterNames.Add(Param.ParameterName);
}
for (const FCollectionScalarParameter& Param : PreviousScalarParameters)
{
ParameterNames.Add(Param.ParameterName);
}
for (const FCollectionVectorParameter& Param : VectorParameters)
{
ParameterNames.Remove(Param.ParameterName);
}
for (const FCollectionScalarParameter& Param : ScalarParameters)
{
ParameterNames.Remove(Param.ParameterName);
}
// Create a material update context so we can safely update materials using this parameter collection.
{
FMaterialUpdateContext UpdateContext;
// Go through all materials in memory and recompile them if they use this material parameter collection
for (TObjectIterator<UMaterial> It; It; ++It)
{
UMaterial* CurrentMaterial = *It;
bool bRecompile = false;
// Preview materials often use expressions for rendering that are not in their Expressions array,
// And therefore their MaterialParameterCollectionInfos are not up to date.
if (CurrentMaterial->bIsPreviewMaterial)
{
bRecompile = true;
}
else
{
for (int32 FunctionIndex = 0; FunctionIndex < CurrentMaterial->MaterialParameterCollectionInfos.Num() && !bRecompile; FunctionIndex++)
{
if (CurrentMaterial->MaterialParameterCollectionInfos[FunctionIndex].ParameterCollection == this)
{
TArray<UMaterialExpressionCollectionParameter*> CollectionParameters;
CurrentMaterial->GetAllExpressionsInMaterialAndFunctionsOfType(CollectionParameters);
for (UMaterialExpressionCollectionParameter* CollectionParameter : CollectionParameters)
{
if (ParameterNames.Contains(CollectionParameter->ParameterName))
{
bRecompile = true;
break;
}
}
}
}
}
if (bRecompile)
{
UpdateContext.AddMaterial(CurrentMaterial);
// Propagate the change to this material
CurrentMaterial->PreEditChange(NULL);
//.........这里部分代码省略.........
开发者ID:colwalder,项目名称:unrealengine,代码行数:101,代码来源:ParameterCollection.cpp
示例10: RegenerateArrays
void UMaterialEditorInstanceConstant::RegenerateArrays()
{
VisibleExpressions.Empty();
ParameterGroups.Empty();
if(Parent)
{
// Only operate on base materials
UMaterial* ParentMaterial = Parent->GetMaterial();
SourceInstance->UpdateParameterNames(); // Update any parameter names that may have changed.
// Loop through all types of parameters for this material and add them to the parameter arrays.
TArray<FName> ParameterNames;
TArray<FGuid> Guids;
ParentMaterial->GetAllVectorParameterNames(ParameterNames, Guids);
// Vector Parameters.
for(int32 ParameterIdx=0; ParameterIdx<ParameterNames.Num(); ParameterIdx++)
{
UDEditorVectorParameterValue & ParameterValue = *(NewObject<UDEditorVectorParameterValue>());
FName ParameterName = ParameterNames[ParameterIdx];
FLinearColor Value;
ParameterValue.bOverride = false;
ParameterValue.ParameterName = ParameterName;
ParameterValue.ExpressionId = Guids[ParameterIdx];
if(SourceInstance->GetVectorParameterValue(ParameterName, Value))
{
ParameterValue.ParameterValue = Value;
}
// @todo: This is kind of slow, maybe store these in a map for lookup?
// See if this keyname exists in the source instance.
for(int32 VectorParameterIdx=0; VectorParameterIdx<SourceInstance->VectorParameterValues.Num(); VectorParameterIdx++)
{
FVectorParameterValue& SourceParam = SourceInstance->VectorParameterValues[VectorParameterIdx];
if(ParameterName==SourceParam.ParameterName)
{
ParameterValue.bOverride = true;
ParameterValue.ParameterValue = SourceParam.ParameterValue;
}
}
AssignParameterToGroup(ParentMaterial, Cast<UDEditorParameterValue>(&ParameterValue));
}
// Scalar Parameters.
ParentMaterial->GetAllScalarParameterNames(ParameterNames, Guids);
for (int32 ParameterIdx=0; ParameterIdx<ParameterNames.Num(); ParameterIdx++)
{
UDEditorScalarParameterValue& ParameterValue = *(NewObject<UDEditorScalarParameterValue>());
FName ParameterName = ParameterNames[ParameterIdx];
float Value;
ParameterValue.bOverride = false;
ParameterValue.ParameterName = ParameterName;
ParameterValue.ExpressionId = Guids[ParameterIdx];
if (SourceInstance->GetScalarParameterValue(ParameterName, Value))
{
ParentMaterial->GetScalarParameterSliderMinMax(ParameterName, ParameterValue.SliderMin, ParameterValue.SliderMax);
ParameterValue.ParameterValue = Value;
}
// @todo: This is kind of slow, maybe store these in a map for lookup?
// See if this keyname exists in the source instance.
for(int32 ScalarParameterIdx=0; ScalarParameterIdx<SourceInstance->ScalarParameterValues.Num(); ScalarParameterIdx++)
{
FScalarParameterValue& SourceParam = SourceInstance->ScalarParameterValues[ScalarParameterIdx];
if(ParameterName==SourceParam.ParameterName)
{
ParameterValue.bOverride = true;
ParameterValue.ParameterValue = SourceParam.ParameterValue;
}
}
AssignParameterToGroup(ParentMaterial, Cast<UDEditorParameterValue>(&ParameterValue));
}
// Texture Parameters.
ParentMaterial->GetAllTextureParameterNames(ParameterNames, Guids);
for(int32 ParameterIdx=0; ParameterIdx<ParameterNames.Num(); ParameterIdx++)
{
UDEditorTextureParameterValue& ParameterValue = *(NewObject<UDEditorTextureParameterValue>());
FName ParameterName = ParameterNames[ParameterIdx];
UTexture* Value;
ParameterValue.bOverride = false;
ParameterValue.ParameterName = ParameterName;
ParameterValue.ExpressionId = Guids[ParameterIdx];
if(SourceInstance->GetTextureParameterValue(ParameterName, Value))
{
ParameterValue.ParameterValue = Value;
}
// @todo: This is kind of slow, maybe store these in a map for lookup?
// See if this keyname exists in the source instance.
for(int32 TextureParameterIdx=0; TextureParameterIdx<SourceInstance->TextureParameterValues.Num(); TextureParameterIdx++)
{
FTextureParameterValue& SourceParam = SourceInstance->TextureParameterValues[TextureParameterIdx];
//.........这里部分代码省略.........
开发者ID:amyvmiwei,项目名称:UnrealEngine4,代码行数:101,代码来源:PreviewMaterial.cpp
示例11: DrawNewGrid
void FGridWidget::DrawNewGrid(const FSceneView* View, FPrimitiveDrawInterface* PDI)
{
bool bUseTextureSolution = CVarEditorNewLevelGrid.GetValueOnGameThread() > 1;
UMaterial* GridMaterial = bUseTextureSolution ? LevelGridMaterial2 : LevelGridMaterial;
UMaterialInstanceDynamic* MaterialInst = bUseTextureSolution ? LevelGridMaterialInst2 : LevelGridMaterialInst;
if (GridMaterial->IsCompilingOrHadCompileError(View->GetFeatureLevel()))
{
// The material would appear to be black (because we don't use a MaterialDomain but a UsageFlag - we should change that).
// Here we rather want to hide it.
return;
}
if(!MaterialInst)
{
return;
}
bool bMSAA = IsEditorCompositingMSAAEnabled(View->GetFeatureLevel());
bool bIsPerspective = ( View->ViewMatrices.ProjMatrix.M[3][3] < 1.0f );
// in unreal units
float SnapGridSize = GEditor->GetGridSize();
// not used yet
const bool bSnapEnabled = GetDefault<ULevelEditorViewportSettings>()->GridEnabled;
float SnapAlphaMultiplier = 1.0f;
// to get a light grid in a black level but use a high opacity value to be able to see it in a bright level
static float Darken = 0.11f;
static FName GridColorName("GridColor");
static FName SnapColorName("SnapColor");
static FName ExponentName("Exponent");
static FName AlphaBiasName("AlphaBias");
if(bIsPerspective)
{
MaterialInst->SetVectorParameterValue(GridColorName, FLinearColor(0.6f * Darken, 0.6f * Darken, 0.6f * Darken, CVarEditor3DGridFade.GetValueOnGameThread()));
MaterialInst->SetVectorParameterValue(SnapColorName, FLinearColor(0.5f, 0.0f, 0.0f, SnapAlphaMultiplier * CVarEditor3DSnapFade.GetValueOnGameThread()));
}
else
{
MaterialInst->SetVectorParameterValue(GridColorName, FLinearColor(0.6f * Darken, 0.6f * Darken, 0.6f * Darken, CVarEditor2DGridFade.GetValueOnGameThread()));
MaterialInst->SetVectorParameterValue(SnapColorName, FLinearColor(0.5f, 0.0f, 0.0f, SnapAlphaMultiplier * CVarEditor2DSnapFade.GetValueOnGameThread()));
}
// true:1m, false:1dm ios smallest grid size
bool bLarger1mGrid = true;
const int Exponent = 10;
// 2 is the default so we need to set it
MaterialInst->SetScalarParameterValue(ExponentName, (float)Exponent);
// without MSAA we need the grid to be more see through so lines behind it can be recognized
MaterialInst->SetScalarParameterValue(AlphaBiasName, bMSAA ? 0.0f : 0.05f);
// grid for size
float GridSplit = 0.5f;
// red dots to visualize the snap
float SnapSplit = 0.075f;
float WorldToUVScale = 0.001f;
if(bLarger1mGrid)
{
WorldToUVScale *= 0.1f;
GridSplit *= 0.1f;
}
// in 2D all grid lines are same size in world space (they are at different scale so we need to adjust here)
FLinearColor GridSplitTriple(GridSplit * 0.01f, GridSplit * 0.1f, GridSplit);
if(bIsPerspective)
{
// largest grid lines
GridSplitTriple.R *= 8.0f;
// medium grid lines
GridSplitTriple.G *= 3.0f;
// fine grid lines
GridSplitTriple.B *= 1.0f;
}
if(!bIsPerspective)
{
// screenspace size looks better in 2d
float ScaleX = View->ViewMatrices.ProjMatrix.M[0][0] * View->ViewRect.Width();
float ScaleY = View->ViewMatrices.ProjMatrix.M[1][1] * View->ViewRect.Height();
float Scale = FMath::Min(ScaleX, ScaleY);
float GridScale = CVarEditor2DSnapScale.GetValueOnGameThread();
float GridMin = CVarEditor2DSnapMin.GetValueOnGameThread();
// we need to account for a larger grids setting
SnapSplit = 1.25f * FMath::Min(GridScale / SnapGridSize / Scale, GridMin);
//.........这里部分代码省略.........
开发者ID:PickUpSU,项目名称:UnrealEngine4,代码行数:101,代码来源:EditorComponents.cpp
示例12: check
void FMaterialThumbnailScene::SetMaterialInterface(UMaterialInterface* InMaterial)
{
check(PreviewActor);
check(PreviewActor->GetStaticMeshComponent());
bIsUIMaterial = false;
if ( InMaterial )
{
// Transform the preview mesh as necessary
FTransform Transform = FTransform::Identity;
const USceneThumbnailInfoWithPrimitive* ThumbnailInfo = Cast<USceneThumbnailInfoWithPrimitive>(InMaterial->ThumbnailInfo);
if ( !ThumbnailInfo )
{
ThumbnailInfo = USceneThumbnailInfoWithPrimitive::StaticClass()->GetDefaultObject<USceneThumbnailInfoWithPrimitive>();
}
UMaterial* BaseMaterial = InMaterial->GetBaseMaterial();
// UI material thumbnails always get a 2D plane centered at the camera which is a better representation of the
// what the material will look like on UI
bIsUIMaterial = BaseMaterial && BaseMaterial->IsUIMaterial();
EThumbnailPrimType PrimitiveType = bIsUIMaterial ? TPT_Plane : ThumbnailInfo->PrimitiveType.GetValue();
switch( PrimitiveType )
{
case TPT_None:
{
bool bFoundCustomMesh = false;
if ( ThumbnailInfo->PreviewMesh.IsValid() )
{
UStaticMesh* MeshToUse = Cast<UStaticMesh>(ThumbnailInfo->PreviewMesh.ResolveObject());
if ( MeshToUse )
{
PreviewActor->GetStaticMeshComponent()->SetStaticMesh(MeshToUse);
bFoundCustomMesh = true;
}
}
if ( !bFoundCustomMesh )
{
// Just use a plane if the mesh was not found
Transform.SetRotation(FQuat(FRotator(0, -90, 0)));
PreviewActor->GetStaticMeshComponent()->SetStaticMesh(GUnrealEd->GetThumbnailManager()->EditorPlane);
}
}
break;
case TPT_Cube:
PreviewActor->GetStaticMeshComponent()->SetStaticMesh(GUnrealEd->GetThumbnailManager()->EditorCube);
break;
case TPT_Sphere:
// The sphere is a little big, scale it down to 256x256x256
Transform.SetScale3D( FVector(0.8f) );
PreviewActor->GetStaticMeshComponent()->SetStaticMesh(GUnrealEd->GetThumbnailManager()->EditorSphere);
break;
case TPT_Cylinder:
PreviewActor->GetStaticMeshComponent()->SetStaticMesh(GUnrealEd->GetThumbnailManager()->EditorCylinder);
break;
case TPT_Plane:
// The plane needs to be rotated 90 degrees to face the camera
Transform.SetRotation(FQuat(FRotator(0, -90, 0)));
PreviewActor->GetStaticMeshComponent()->SetStaticMesh(GUnrealEd->GetThumbnailManager()->EditorPlane);
break;
default:
check(0);
}
PreviewActor->GetStaticMeshComponent()->SetRelativeTransform(Transform);
PreviewActor->GetStaticMeshComponent()->UpdateBounds();
// Center the mesh at the world origin then offset to put it on top of the plane
const float BoundsZOffset = GetBoundsZOffset(PreviewActor->GetStaticMeshComponent()->Bounds);
Transform.SetLocation(-PreviewActor->GetStaticMeshComponent()->Bounds.Origin + FVector(0, 0, BoundsZOffset));
PreviewActor->GetStaticMeshComponent()->SetRelativeTransform(Transform);
}
PreviewActor->GetStaticMeshComponent()->SetMaterial(0, InMaterial);
PreviewActor->GetStaticMeshComponent()->RecreateRenderState_Concurrent();
}
开发者ID:zhaoyizheng0930,项目名称:UnrealEngine,代码行数:85,代码来源:ThumbnailHelpers.cpp
示例13: CreateMaterial
//! @brief Create an Unreal Material for the given graph-instance
UMaterial* CreateMaterial(graph_inst_t* GraphInstance,
const FString & MaterialName,
UObject* Outer)
{
// create an unreal material asset
UMaterialFactoryNew* MaterialFactory = NewObject<UMaterialFactoryNew>();
UMaterial* UnrealMaterial =
(UMaterial*)MaterialFactory->FactoryCreateNew(
UMaterial::StaticClass(),
Substance::Helpers::CreateObjectPackage(Outer, MaterialName),
*MaterialName,
RF_Standalone|RF_Public, NULL, GWarn );
// textures and properties
for (auto ItOut = GraphInstance->Outputs.itfront(); ItOut; ++ItOut)
{
output_inst_t* OutputInst = &(*ItOut);
output_desc_t* OutputDesc = OutputInst->GetOutputDesc();
CreateMaterialExpression(
OutputInst,
UnrealMaterial);
}
// special case: emissive only materials
TArray<FName> ParamNames;
TArray<FGuid> ParamIds;
UnrealMaterial->GetAllTextureParameterNames(ParamNames, ParamIds);
if (ParamNames.Num() == 1)
{
if (ParamNames[0].ToString() == TEXT("emissive"))
{
UnrealMaterial->SetShadingModel(MSM_Unlit);
}
}
// special case: no roughness but glossiness
if (!UnrealMaterial->Roughness.IsConnected())
{
for (auto ItOut = GraphInstance->Outputs.itfront(); ItOut; ++ItOut)
{
output_inst_t* OutputInst = &(*ItOut);
output_desc_t* OutputDesc = OutputInst->GetOutputDesc();
UTexture* Texture = *OutputInst->Texture;
if (OutputDesc->Channel == CHAN_Glossiness && Texture)
{
// and link it to the material
UMaterialExpressionOneMinus* OneMinus = NewObject<UMaterialExpressionOneMinus>(UnrealMaterial);
UMaterialExpressionTextureSampleParameter2D* UnrealTextureExpression =
CreateSampler(UnrealMaterial, Texture, OutputDesc);
UnrealTextureExpression->MaterialExpressionEditorX -= 200;
OneMinus->MaterialExpressionEditorX = -200;
OneMinus->MaterialExpressionEditorY = UnrealTextureExpression->MaterialExpressionEditorY;
UnrealTextureExpression->ConnectExpression(OneMinus->GetInput(0), 0);
UnrealMaterial->Roughness.Expression = OneMinus;
UnrealMaterial->Expressions.Add(UnrealTextureExpression);
UnrealMaterial->Expressions.Add(OneMinus);
}
}
}
// let the material update itself if necessary
UnrealMaterial->PreEditChange(NULL);
UnrealMaterial->PostEditChange();
return UnrealMaterial;
}
开发者ID:RandomDeveloperM,项目名称:UE4_Hairworks,代码行数:75,代码来源:SubstanceEditorHelpers.cpp
示例14: SetLightingGuid
void UTexture::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
{
Super::PostEditChangeProperty(PropertyChangedEvent);
SetLightingGuid();
// Determine whether any property that requires recompression of the texture, or notification to Materials has changed.
bool RequiresNotifyMaterials = false;
bool DeferCompressionWasEnabled = false;
UProperty* PropertyThatChanged = PropertyChangedEvent.Property;
if( PropertyThatChanged )
{
static const FName CompressionSettingsName("CompressionSettings");
static const FName LODGroupName("LODGroup");
static const FName DeferCompressionName("DeferCompression");
#if WITH_EDITORONLY_DATA
static const FName MaxTextureSizeName("MaxTextureSize");
#endif // #if WITH_EDITORONLY_DATA
const FName PropertyName = PropertyThatChanged->GetFName();
if (PropertyName == CompressionSettingsName || PropertyName == LODGroupName)
{
RequiresNotifyMaterials = true;
}
else if (PropertyName == DeferCompressionName)
{
DeferCompressionWasEnabled = DeferCompression;
}
#if WITH_EDITORONLY_DATA
else if (PropertyName == MaxTextureSizeName)
{
if (MaxTextureSize <= 0)
{
MaxTextureSize = 0;
}
else
{
MaxTextureSize = FMath::Min<int32>(FMath::RoundUpToPowerOfTwo(MaxTextureSize), GetMaximumDimension());
}
}
#endif // #if WITH_EDITORONLY_DATA
bool bPreventSRGB = (CompressionSettings == TC_Alpha || CompressionSettings == TC_Normalmap || CompressionSettings == TC_Masks || CompressionSettings == TC_HDR || CompressionSettings == TC_HDR_Compressed);
if(bPreventSRGB && SRGB == true)
{
SRGB = false;
}
}
else
{
FMaterialUpdateContext UpdateContext;
// Update any material that uses this texture
TSet<UMaterial*> BaseMaterialsThatUseThisTexture;
for (TObjectIterator<UMaterialInterface> It; It; ++It)
{
UMaterialInterface* MaterialInterface = *It;
if (DoesMaterialUseTexture(MaterialInterface, this))
{
UMaterial *Material = MaterialInterface->GetMaterial();
bool MaterialAlreadyCompute = false;
BaseMaterialsThatUseThisTexture.Add(Material, &MaterialAlreadyCompute);
if (!MaterialAlreadyCompute)
{
UpdateContext.AddMaterial(Material);
if (Material->IsTextureForceRecompileCacheRessource(this))
{
Material->UpdateMaterialShaderCacheAndTextureReferences();
}
}
}
}
//If the DDC key was different the material is already recompile here
RequiresNotifyMaterials = false;
}
NumCinematicMipLevels = FMath::Max<int32>( NumCinematicMipLevels, 0 );
// Don't update the texture resource if we've turned "DeferCompression" on, as this
// would cause it to immediately update as an uncompressed texture
if( !DeferCompressionWasEnabled && (PropertyChangedEvent.ChangeType & EPropertyChangeType::Interactive) == 0 )
{
// Update the texture resource. This will recache derived data if necessary
// which may involve recompressing the texture.
UpdateResource();
}
// Notify any loaded material instances if changed our compression format
if (RequiresNotifyMaterials)
{
TArray<UMaterialInterface*> MaterialsThatUseThisTexture;
// Create a material update context to safely update materials.
{
FMaterialUpdateContext UpdateContext;
// Notify any material that uses this texture
TSet<UMaterial*> BaseMaterialsThatUseThisTexture;
for (TObjectIterator<UMaterialInterface> It; It; ++It)
{
//.........这里部分代码省略.........
开发者ID:zhaoyizheng0930,项目名称:UnrealEngine,代码行数:101,代码来源:Texture.cpp
注:本文中的UMaterial类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论