- Editor\MaterialEditor\Private\MaterialEditorInstanceDetailCustomization.cpp
- FMaterialInstanceParameterDetails::CreateBasePropertyOverrideWidgets
1
2
3
4
5
6
7
8
|
| TAttribute<bool> IsOverrideOpacityClipMaskValueEnabled = TAttribute<bool>::Create(TAttribute<bool>::FGetter::CreateSP(this, &FMaterialInstanceParameterDetails::OverrideOpacityClipMaskValueEnabled));
TAttribute<bool> IsOverrideBlendModeEnabled = TAttribute<bool>::Create(TAttribute<bool>::FGetter::CreateSP(this, &FMaterialInstanceParameterDetails::OverrideBlendModeEnabled));
TAttribute<bool> IsOverrideShadingModelEnabled = TAttribute<bool>::Create(TAttribute<bool>::FGetter::CreateSP(this, &FMaterialInstanceParameterDetails::OverrideShadingModelEnabled));
TAttribute<bool> IsOverrideTranslucencyLightingModeEnabled = TAttribute<bool>::Create(TAttribute<bool>::FGetter::CreateSP(this, &FMaterialInstanceParameterDetails::OverrideTranslucencyLightingModeEnabled));
TAttribute<bool> IsOverrideTwoSidedEnabled = TAttribute<bool>::Create(TAttribute<bool>::FGetter::CreateSP(this, &FMaterialInstanceParameterDetails::OverrideTwoSidedEnabled));
TAttribute<bool> IsOverrideDitheredLODTransitionEnabled = TAttribute<bool>::Create(TAttribute<bool>::FGetter::CreateSP(this, &FMaterialInstanceParameterDetails::OverrideDitheredLODTransitionEnabled));
|
1
2
3
4
5
6
7
8
9
|
| TSharedRef<IPropertyHandle> BasePropertyOverridePropery = DetailLayout.GetProperty("BasePropertyOverrides");
TSharedPtr<IPropertyHandle> OpacityClipMaskValueProperty = BasePropertyOverridePropery->GetChildHandle("OpacityMaskClipValue");
TSharedPtr<IPropertyHandle> BlendModeProperty = BasePropertyOverridePropery->GetChildHandle("BlendMode");
TSharedPtr<IPropertyHandle> ShadingModelProperty = BasePropertyOverridePropery->GetChildHandle("ShadingModel");
TSharedPtr<IPropertyHandle> TranslucencyLightingModeProperty = BasePropertyOverridePropery->GetChildHandle("TranslucencyLightingMode");
TSharedPtr<IPropertyHandle> TwoSidedProperty = BasePropertyOverridePropery->GetChildHandle("TwoSided");
TSharedPtr<IPropertyHandle> DitheredLODTransitionProperty = BasePropertyOverridePropery->GetChildHandle("DitheredLODTransition");
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
| IDetailPropertyRow& ShadingModelPropertyRow = BasePropertyOverrideGroup.AddPropertyRow(ShadingModelProperty.ToSharedRef());
ShadingModelPropertyRow
.DisplayName(ShadingModelProperty->GetPropertyDisplayName())
.ToolTip(ShadingModelProperty->GetToolTipText())
.EditCondition(IsOverrideShadingModelEnabled, FOnBooleanValueChanged::CreateSP(this, &FMaterialInstanceParameterDetails::OnOverrideShadingModelChanged));
IDetailPropertyRow& TranslucencyLightingModePropertyRow = BasePropertyOverrideGroup.AddPropertyRow(TranslucencyLightingModeProperty.ToSharedRef());
TranslucencyLightingModePropertyRow
.DisplayName(TranslucencyLightingModeProperty->GetPropertyDisplayName())
.ToolTip(TranslucencyLightingModeProperty->GetToolTipText())
.EditCondition(IsOverrideTranslucencyLightingModeEnabled, FOnBooleanValueChanged::CreateSP(this, &FMaterialInstanceParameterDetails::OnOverrideTranslucencyLightingModeChanged));
|
- メソッド追加
1
2
3
4
5
6
|
-
|
!
| bool FMaterialInstanceParameterDetails::OverrideTranslucencyLightingModeEnabled() const
{
return MaterialEditorInstance->BasePropertyOverrides.bOverride_TranslucencyLightingMode;
}
|
1
2
3
4
5
6
7
8
|
-
|
|
|
!
| void FMaterialInstanceParameterDetails::OnOverrideTranslucencyLightingModeChanged(bool NewValue)
{
MaterialEditorInstance->BasePropertyOverrides.bOverride_TranslucencyLightingMode = NewValue;
MaterialEditorInstance->PostEditChange();
FEditorSupportDelegates::RedrawAllViewports.Broadcast();
}
|
- Editor\MaterialEditor\Private\MaterialEditorInstanceDetailCustomization.h
- FMaterialInstanceParameterDetails
1
2
3
4
5
6
7
8
|
| bool OverrideOpacityClipMaskValueEnabled() const;
bool OverrideBlendModeEnabled() const;
bool OverrideShadingModelEnabled() const;
bool OverrideTranslucencyLightingModeEnabled() const;
bool OverrideTwoSidedEnabled() const;
bool OverrideDitheredLODTransitionEnabled() const;
|
1
2
3
4
5
6
7
8
|
| void OnOverrideOpacityClipMaskValueChanged(bool NewValue);
void OnOverrideBlendModeChanged(bool NewValue);
void OnOverrideShadingModelChanged(bool NewValue);
void OnOverrideTranslucencyLightingModeChanged(bool NewValue);
void OnOverrideTwoSidedChanged(bool NewValue);
void OnOverrideDitheredLODTransitionChanged(bool NewValue);
|
- Runtime\Engine\Classes\Materials\Material.h
- UMaterial
1
2
3
4
5
6
7
8
|
| ENGINE_API virtual float GetOpacityMaskClipValue() const override;
ENGINE_API virtual EBlendMode GetBlendMode() const override;
ENGINE_API virtual EMaterialShadingModel GetShadingModel() const override;
ENGINE_API virtual enum ETranslucencyLightingMode GetTranslucencyLightingMode() const override;
ENGINE_API virtual bool IsTwoSided() const override;
ENGINE_API virtual bool IsDitheredLODTransition() const override;
|
- Runtime\Engine\Classes\Materials\MaterialInstance.h
- UMaterialInstance
1
2
3
4
5
6
7
8
|
| float OpacityMaskClipValue;
TEnumAsByte<EBlendMode> BlendMode;
TEnumAsByte<EMaterialShadingModel> ShadingModel;
TEnumAsByte<enum ETranslucencyLightingMode> TranslucencyLightingMode;
uint32 TwoSided : 1;
uint32 DitheredLODTransition : 1;
|
1
2
3
4
5
6
7
8
9
|
| ENGINE_API virtual float GetOpacityMaskClipValue() const override;
ENGINE_API virtual EBlendMode GetBlendMode() const override;
ENGINE_API virtual EMaterialShadingModel GetShadingModel() const override;
ENGINE_API virtual enum ETranslucencyLightingMode GetTranslucencyLightingMode() const override;
ENGINE_API virtual bool IsTwoSided() const override;
ENGINE_API virtual bool IsDitheredLODTransition() const override;
ENGINE_API virtual bool IsMasked() const override;;
|
- Runtime\Engine\Classes\Materials\MaterialInstanceBasePropertyOverrides.h
- FMaterialInstanceBasePropertyOverrides
1
2
3
4
5
6
7
8
9
|
|
UPROPERTY(EditAnywhere, Category = Material)
bool bOverride_TwoSided;
UPROPERTY(EditAnywhere, Category = Material)
bool bOverride_TranslucencyLightingMode;
|
1
2
3
4
5
6
7
8
9
|
|
UPROPERTY(EditAnywhere, Category = Material, meta = (editcondition = "bOverride_ShadingModel"))
TEnumAsByte<EMaterialShadingModel> ShadingModel;
UPROPERTY(EditAnywhere, Category = Material, meta = (editcondition = "bOverride_TranslucencyLightingMode"))
TEnumAsByte<enum ETranslucencyLightingMode> TranslucencyLightingMode;
|
- Runtime\Engine\Classes\Materials\MaterialInstanceDynamic.h
- UMaterialInstanceDynamic
1
2
3
4
5
6
7
8
9
10
|
| virtual float GetOpacityMaskClipValue() const override;
virtual EBlendMode GetBlendMode() const override;
virtual EMaterialShadingModel GetShadingModel() const override;
virtual enum ETranslucencyLightingMode GetTranslucencyLightingMode() const override;
virtual bool IsTwoSided() const override;
virtual bool IsDitheredLODTransition() const override;
virtual bool IsMasked() const override;
|
- Runtime\Engine\Classes\Materials\MaterialInterface.h
- UMaterialInterface
1
2
3
4
5
6
7
8
9
10
11
|
| ENGINE_API virtual float GetOpacityMaskClipValue() const;
ENGINE_API virtual EBlendMode GetBlendMode() const;
ENGINE_API virtual EMaterialShadingModel GetShadingModel() const;
ENGINE_API virtual enum ETranslucencyLightingMode GetTranslucencyLightingMode() const;
ENGINE_API virtual bool IsTwoSided() const;
ENGINE_API virtual bool IsDitheredLODTransition() const;
ENGINE_API virtual bool IsTranslucencyWritingCustomDepth() const;
ENGINE_API virtual bool IsMasked() const;
ENGINE_API virtual bool IsDeferredDecal() const;
|
- Runtime\Engine\Private\Materials\Material.cpp
- メソッド追加
1
2
3
4
5
6
|
-
|
!
| ETranslucencyLightingMode UMaterial::GetTranslucencyLightingMode() const
{
return TranslucencyLightingMode;
}
|
- Runtime\Engine\Private\Materials\MaterialInstance.cpp
- メソッド追加
1
2
3
4
5
6
|
-
|
!
| ETranslucencyLightingMode UMaterialInstanceDynamic::GetTranslucencyLightingMode() const
{
return Parent ? Parent->GetTranslucencyLightingMode() : TLM_VolumetricNonDirectional;
}
|
1
2
3
4
5
6
|
-
|
!
| ETranslucencyLightingMode UMaterialInstance::GetTranslucencyLightingMode() const
{
return TranslucencyLightingMode;
}
|
- UMaterialInstance::UpdateOverridableBaseProperties
1
2
3
4
5
6
7
8
|
| OpacityMaskClipValue = 0.0f;
BlendMode = BLEND_Opaque;
ShadingModel = MSM_DefaultLit;
TranslucencyLightingMode = TLM_VolumetricNonDirectional;
TwoSided = 0;
DitheredLODTransition = 0;
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
-
|
!
-
|
!
-
|
!
-
|
!
| if (BasePropertyOverrides.bOverride_ShadingModel)
{
ShadingModel = BasePropertyOverrides.ShadingModel;
}
else
{
ShadingModel = Parent->GetShadingModel();
}
if (BasePropertyOverrides.bOverride_TranslucencyLightingMode)
{
TranslucencyLightingMode = BasePropertyOverrides.TranslucencyLightingMode;
}
else
{
TranslucencyLightingMode = Parent->GetTranslucencyLightingMode();
}
|
- UMaterialInstance::Serialize
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
-
|
|
-
|
|
!
!
-
|
!
| if( Ar.UE4Ver() < VER_UE4_STATIC_SHADOW_DEPTH_MAPS )
{
switch( BasePropertyOverrides.ShadingModel )
{
case MSM_Unlit: BasePropertyOverrides.ShadingModel = MSM_DefaultLit; break;
case MSM_DefaultLit: BasePropertyOverrides.ShadingModel = MSM_Unlit; break;
}
}
if( Ar.LicenseeUE4Ver() >= VER_LIC_COM04_VER01) {
Ar << BasePropertyOverrides.bOverride_TranslucencyLightingMode << BasePropertyOverrides.TranslucencyLightingMode;
}
|
- UMaterialInstance::GetBasePropertyOverridesHash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
-
|
|
|
|
!
-
|
|
|
|
!
| EMaterialShadingModel UsedShadingModel = GetShadingModel();
if (UsedShadingModel != Mat->GetShadingModel())
{
const FString HashString = TEXT("bOverride_ShadingModel");
Hash.UpdateWithString(*HashString, HashString.Len());
Hash.Update((const uint8*)&UsedShadingModel, sizeof(UsedShadingModel));
bHasOverrides = true;
}
ETranslucencyLightingMode UsedTranslucencyLightingMode = GetTranslucencyLightingMode();
if (UsedTranslucencyLightingMode != Mat->GetTranslucencyLightingMode())
{
const FString HashString = TEXT("bOverride_TranslucencyLightingMode");
Hash.UpdateWithString(*HashString, HashString.Len());
Hash.Update((const uint8*)&UsedTranslucencyLightingMode, sizeof(UsedTranslucencyLightingMode));
bHasOverrides = true;
}
|
- UMaterialInstance::HasOverridenBaseProperties
1
2
3
4
5
6
7
8
9
10
|
| if (Parent && Material && Material->bUsedAsSpecialEngineMaterial == false &&
((FMath::Abs(GetOpacityMaskClipValue() - Parent->GetOpacityMaskClipValue()) > SMALL_NUMBER) ||
(GetBlendMode() != Parent->GetBlendMode()) ||
(GetShadingModel() != Parent->GetShadingModel()) ||
(GetTranslucencyLightingMode() != Parent->GetTranslucencyLightingMode()) ||
(IsTwoSided() != Parent->IsTwoSided()) ||
(IsDitheredLODTransition() != Parent->IsDitheredLODTransition()))
)
|
- Runtime\Engine\Private\Materials\MaterialInterface.cpp
- メソッド追加
1
2
3
4
5
6
|
-
|
!
| ETranslucencyLightingMode UMaterialInterface::GetTranslucencyLightingMode() const
{
return TLM_VolumetricNonDirectional;
}
|
- Runtime\Engine\Private\Materials\MaterialShared.cpp
- FMaterialResource::GetTranslucencyLightingMode
1
2
3
4
5
6
|
-
|
|
|
!
| ETranslucencyLightingMode FMaterialResource::GetTranslucencyLightingMode() const
{
return (ETranslucencyLightingMode)(MaterialInstance ? MaterialInstance->GetTranslucencyLightingMode() : Material->GetTranslucencyLightingMode());
}
|
- FMaterialInstanceBasePropertyOverrides::FMaterialInstanceBasePropertyOverrides
1
2
3
4
5
6
7
|
| ,bOverride_ShadingModel(false)
,bOverride_DitheredLODTransition(false)
,bOverride_TwoSided(false)
,bOverride_TranslucencyLightingMode(false)
,OpacityMaskClipValue(.333333f)
|
- FMaterialInstanceBasePropertyOverrides::operator==
1
2
3
4
5
6
7
|
| bOverride_ShadingModel == Other.bOverride_ShadingModel &&
bOverride_TwoSided == Other.bOverride_TwoSided &&
bOverride_DitheredLODTransition == Other.bOverride_DitheredLODTransition &&
bOverride_TranslucencyLightingMode == Other.bOverride_TranslucencyLightingMode &&
OpacityMaskClipValue == Other.OpacityMaskClipValue &&
|
|