- 追加された行はこの色です。
- 削除された行はこの色です。
#contents
----
&ref(MaterialInstance_override01.jpg,,70%);
* 参考 [#p9921999]
* Translucency Lighting Modeを追加してみた [#a6152198]
+ COLOR(#3030c0){Editor\MaterialEditor\Private\MaterialEditorInstanceDetailCustomization.cpp}
-- FMaterialInstanceParameterDetails::CreateBasePropertyOverrideWidgets
#code(c,nomenu){{
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));
// start -------
TAttribute<bool> IsOverrideTranslucencyLightingModeEnabled = TAttribute<bool>::Create(TAttribute<bool>::FGetter::CreateSP(this, &FMaterialInstanceParameterDetails::OverrideTranslucencyLightingModeEnabled));
// end ---------
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));
}}
#code(c,nomenu){{
TSharedRef<IPropertyHandle> BasePropertyOverridePropery = DetailLayout.GetProperty("BasePropertyOverrides");
TSharedPtr<IPropertyHandle> OpacityClipMaskValueProperty = BasePropertyOverridePropery->GetChildHandle("OpacityMaskClipValue");
TSharedPtr<IPropertyHandle> BlendModeProperty = BasePropertyOverridePropery->GetChildHandle("BlendMode");
TSharedPtr<IPropertyHandle> ShadingModelProperty = BasePropertyOverridePropery->GetChildHandle("ShadingModel");
// start -------
TSharedPtr<IPropertyHandle> TranslucencyLightingModeProperty = BasePropertyOverridePropery->GetChildHandle("TranslucencyLightingMode");
// end ---------
TSharedPtr<IPropertyHandle> TwoSidedProperty = BasePropertyOverridePropery->GetChildHandle("TwoSided");
TSharedPtr<IPropertyHandle> DitheredLODTransitionProperty = BasePropertyOverridePropery->GetChildHandle("DitheredLODTransition");
}}
#code(c,nomenu){{
IDetailPropertyRow& ShadingModelPropertyRow = BasePropertyOverrideGroup.AddPropertyRow(ShadingModelProperty.ToSharedRef());
ShadingModelPropertyRow
.DisplayName(ShadingModelProperty->GetPropertyDisplayName())
.ToolTip(ShadingModelProperty->GetToolTipText())
.EditCondition(IsOverrideShadingModelEnabled, FOnBooleanValueChanged::CreateSP(this, &FMaterialInstanceParameterDetails::OnOverrideShadingModelChanged));
// start -------
IDetailPropertyRow& TranslucencyLightingModePropertyRow = BasePropertyOverrideGroup.AddPropertyRow(TranslucencyLightingModeProperty.ToSharedRef());
TranslucencyLightingModePropertyRow
.DisplayName(TranslucencyLightingModeProperty->GetPropertyDisplayName())
.ToolTip(TranslucencyLightingModeProperty->GetToolTipText())
.EditCondition(IsOverrideTranslucencyLightingModeEnabled, FOnBooleanValueChanged::CreateSP(this, &FMaterialInstanceParameterDetails::OnOverrideTranslucencyLightingModeChanged));
// end ---------
}}
-- メソッド追加
#code(c,nomenu){{
// start -------
bool FMaterialInstanceParameterDetails::OverrideTranslucencyLightingModeEnabled() const
{
return MaterialEditorInstance->BasePropertyOverrides.bOverride_TranslucencyLightingMode;
}
// end ---------
}}
#code(c,nomenu){{
// start -------
void FMaterialInstanceParameterDetails::OnOverrideTranslucencyLightingModeChanged(bool NewValue)
{
MaterialEditorInstance->BasePropertyOverrides.bOverride_TranslucencyLightingMode = NewValue;
MaterialEditorInstance->PostEditChange();
FEditorSupportDelegates::RedrawAllViewports.Broadcast();
}
// end ---------
}}
+ COLOR(#3030c0){Editor\MaterialEditor\Private\MaterialEditorInstanceDetailCustomization.h}
-- FMaterialInstanceParameterDetails
#code(c,nomenu){{
bool OverrideOpacityClipMaskValueEnabled() const;
bool OverrideBlendModeEnabled() const;
bool OverrideShadingModelEnabled() const;
// start -------
bool OverrideTranslucencyLightingModeEnabled() const;
// end ---------
bool OverrideTwoSidedEnabled() const;
bool OverrideDitheredLODTransitionEnabled() const;
}}
#code(c,nomenu){{
void OnOverrideOpacityClipMaskValueChanged(bool NewValue);
void OnOverrideBlendModeChanged(bool NewValue);
void OnOverrideShadingModelChanged(bool NewValue);
// start -------
void OnOverrideTranslucencyLightingModeChanged(bool NewValue);
// end ---------
void OnOverrideTwoSidedChanged(bool NewValue);
void OnOverrideDitheredLODTransitionChanged(bool NewValue);
}}
+ COLOR(#3030c0){Runtime\Engine\Classes\Materials\Material.h}
-- UMaterial
#code(c,nomenu){{
ENGINE_API virtual float GetOpacityMaskClipValue() const override;
ENGINE_API virtual EBlendMode GetBlendMode() const override;
ENGINE_API virtual EMaterialShadingModel GetShadingModel() const override;
// start -------
ENGINE_API virtual enum ETranslucencyLightingMode GetTranslucencyLightingMode() const override;
// end ---------
ENGINE_API virtual bool IsTwoSided() const override;
ENGINE_API virtual bool IsDitheredLODTransition() const override;
}}
+ COLOR(#3030c0){Runtime\Engine\Classes\Materials\MaterialInstance.h}
-- UMaterialInstance
#code(c,nomenu){{
float OpacityMaskClipValue;
TEnumAsByte<EBlendMode> BlendMode;
TEnumAsByte<EMaterialShadingModel> ShadingModel;
// start -------
TEnumAsByte<enum ETranslucencyLightingMode> TranslucencyLightingMode;
// end ---------
uint32 TwoSided : 1;
uint32 DitheredLODTransition : 1;
}}
#code(c,nomenu){{
ENGINE_API virtual float GetOpacityMaskClipValue() const override;
ENGINE_API virtual EBlendMode GetBlendMode() const override;
ENGINE_API virtual EMaterialShadingModel GetShadingModel() const override;
// start -------
ENGINE_API virtual enum ETranslucencyLightingMode GetTranslucencyLightingMode() const override;
// end ---------
ENGINE_API virtual bool IsTwoSided() const override;
ENGINE_API virtual bool IsDitheredLODTransition() const override;
ENGINE_API virtual bool IsMasked() const override;;
}}
+ COLOR(#3030c0){Runtime\Engine\Classes\Materials\MaterialInstanceBasePropertyOverrides.h}
-- FMaterialInstanceBasePropertyOverrides
#code(c,nomenu){{
/** Enables override of the two sided property. */
UPROPERTY(EditAnywhere, Category = Material)
bool bOverride_TwoSided;
// start -------
/** Enables override of the two sided property. */
UPROPERTY(EditAnywhere, Category = Material)
bool bOverride_TranslucencyLightingMode;
// end ---------
}}
#code(c,nomenu){{
/** The shading model */
UPROPERTY(EditAnywhere, Category = Material, meta = (editcondition = "bOverride_ShadingModel"))
TEnumAsByte<EMaterialShadingModel> ShadingModel;
// start -------
/** The shading model */
UPROPERTY(EditAnywhere, Category = Material, meta = (editcondition = "bOverride_TranslucencyLightingMode"))
TEnumAsByte<enum ETranslucencyLightingMode> TranslucencyLightingMode;
// end ---------
}}
+ COLOR(#3030c0){Runtime\Engine\Classes\Materials\MaterialInstanceDynamic.h}
-- UMaterialInstanceDynamic
#code(c,nomenu){{
//Material base property overrides. MIDs cannot override these so they just grab from their parent.
virtual float GetOpacityMaskClipValue() const override;
virtual EBlendMode GetBlendMode() const override;
virtual EMaterialShadingModel GetShadingModel() const override;
// start -------
virtual enum ETranslucencyLightingMode GetTranslucencyLightingMode() const override;
// end ---------
virtual bool IsTwoSided() const override;
virtual bool IsDitheredLODTransition() const override;
virtual bool IsMasked() const override;
}}
+ COLOR(#3030c0){Runtime\Engine\Classes\Materials\MaterialInterface.h}
-- UMaterialInterface
#code(c,nomenu){{
ENGINE_API virtual float GetOpacityMaskClipValue() const;
ENGINE_API virtual EBlendMode GetBlendMode() const;
ENGINE_API virtual EMaterialShadingModel GetShadingModel() const;
// start -------
ENGINE_API virtual enum ETranslucencyLightingMode GetTranslucencyLightingMode() const;
// end ---------
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;
}}
+ COLOR(#3030c0){Runtime\Engine\Private\Materials\Material.cpp}
-- メソッド追加
#code(c,nomenu){{
// start -------
ETranslucencyLightingMode UMaterial::GetTranslucencyLightingMode() const
{
return TranslucencyLightingMode;
}
// end ---------
}}
+ COLOR(#3030c0){Runtime\Engine\Private\Materials\MaterialInstance.cpp}
-- メソッド追加
#code(c,nomenu){{
// start -------
ETranslucencyLightingMode UMaterialInstanceDynamic::GetTranslucencyLightingMode() const
{
return Parent ? Parent->GetTranslucencyLightingMode() : TLM_VolumetricNonDirectional;
}
// end ---------
}}
#code(c,nomenu){{
// start -------
ETranslucencyLightingMode UMaterialInstance::GetTranslucencyLightingMode() const
{
return TranslucencyLightingMode;
}
// end ---------
}}
-- UMaterialInstance::UpdateOverridableBaseProperties
#code(c,nomenu){{
OpacityMaskClipValue = 0.0f;
BlendMode = BLEND_Opaque;
ShadingModel = MSM_DefaultLit;
// start -------
TranslucencyLightingMode = TLM_VolumetricNonDirectional;
// end ---------
TwoSided = 0;
DitheredLODTransition = 0;
}}
#code(c,nomenu){{
if (BasePropertyOverrides.bOverride_ShadingModel)
{
ShadingModel = BasePropertyOverrides.ShadingModel;
}
else
{
ShadingModel = Parent->GetShadingModel();
}
// start -------
if (BasePropertyOverrides.bOverride_TranslucencyLightingMode)
{
TranslucencyLightingMode = BasePropertyOverrides.TranslucencyLightingMode;
}
else
{
TranslucencyLightingMode = Parent->GetTranslucencyLightingMode();
}
// end ---------
}}
-- UMaterialInstance::Serialize
--- 「VER_LIC_COM04_VER01」は自分の改造バージョンを記述する→[[エンジン改造-アセットのエンジンバージョン管理]]
#code(c,nomenu){{
// unrelated but closest change to bug
if( Ar.UE4Ver() < VER_UE4_STATIC_SHADOW_DEPTH_MAPS )
{
// switched enum order
switch( BasePropertyOverrides.ShadingModel )
{
case MSM_Unlit: BasePropertyOverrides.ShadingModel = MSM_DefaultLit; break;
case MSM_DefaultLit: BasePropertyOverrides.ShadingModel = MSM_Unlit; break;
}
}
// start -------
if( Ar.LicenseeUE4Ver() >= VER_LIC_COM04_VER01) {
Ar << BasePropertyOverrides.bOverride_TranslucencyLightingMode << BasePropertyOverrides.TranslucencyLightingMode;
}
// end ---------
}}
-- UMaterialInstance::GetBasePropertyOverridesHash
#code(c,nomenu){{
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;
}
// start -------
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;
}
// end ---------
}}
-- UMaterialInstance::HasOverridenBaseProperties
#code(c,nomenu){{
if (Parent && Material && Material->bUsedAsSpecialEngineMaterial == false &&
((FMath::Abs(GetOpacityMaskClipValue() - Parent->GetOpacityMaskClipValue()) > SMALL_NUMBER) ||
(GetBlendMode() != Parent->GetBlendMode()) ||
(GetShadingModel() != Parent->GetShadingModel()) ||
// start -------
(GetTranslucencyLightingMode() != Parent->GetTranslucencyLightingMode()) ||
// end ---------
(IsTwoSided() != Parent->IsTwoSided()) ||
(IsDitheredLODTransition() != Parent->IsDitheredLODTransition()))
)
}}
+ COLOR(#3030c0){Runtime\Engine\Private\Materials\MaterialInterface.cpp}
-- メソッド追加
#code(c,nomenu){{
// start -------
ETranslucencyLightingMode UMaterialInterface::GetTranslucencyLightingMode() const
{
return TLM_VolumetricNonDirectional;
}
// end ---------
}}
+ COLOR(#3030c0){Runtime\Engine\Private\Materials\MaterialShared.cpp}
-- FMaterialResource::GetTranslucencyLightingMode
#code(c,nomenu){{
ETranslucencyLightingMode FMaterialResource::GetTranslucencyLightingMode() const
{
// start -------
return (ETranslucencyLightingMode)(MaterialInstance ? MaterialInstance->GetTranslucencyLightingMode() : Material->TranslucencyLightingMode);
return (ETranslucencyLightingMode)(MaterialInstance ? MaterialInstance->GetTranslucencyLightingMode() : Material->GetTranslucencyLightingMode());
// end ---------
}
}}
-- FMaterialInstanceBasePropertyOverrides::FMaterialInstanceBasePropertyOverrides
#code(c,nomenu){{
,bOverride_ShadingModel(false)
,bOverride_DitheredLODTransition(false)
,bOverride_TwoSided(false)
// start -------
,bOverride_TranslucencyLightingMode(false)
// end ---------
,OpacityMaskClipValue(.333333f)
}}
-- FMaterialInstanceBasePropertyOverrides::operator==
#code(c,nomenu){{
bOverride_ShadingModel == Other.bOverride_ShadingModel &&
bOverride_TwoSided == Other.bOverride_TwoSided &&
bOverride_DitheredLODTransition == Other.bOverride_DitheredLODTransition &&
// start -------
bOverride_TranslucencyLightingMode == Other.bOverride_TranslucencyLightingMode &&
// end ---------
OpacityMaskClipValue == Other.OpacityMaskClipValue &&
}}