• 追加された行はこの色です。
  • 削除された行はこの色です。
#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->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 &&
}}


    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS