UE4.15.1で検証
参考 †
メモ †
- EMaterialProperty - MP_MAXは33が限界。Uint32でビットマスクにして使っている。
やってみた †
- Engine\Source\Runtime\Engine\Public\SceneTypes.h
- enum EMaterialProperty
| #spanend
MP_PixelDepthOffset,
#spanadd
|
の下に追加分
- Engine\Source\Runtime\Engine\Classes\Materials\Material.h
| #spanend
FScalarMaterialInput PixelDepthOffset;
#spanadd
|
の下に追加するパラメーターの変数を追加する
| #spanend
UPROPERTY()
FScalarMaterialInput CellShadeParam;
#spanadd
|
- FScalarMaterialInput
- FVector2MaterialInput
- FVectorMaterialInput
- Engine\Source\Runtime\Engine\Private\Materials\Material.cpp
- void UMaterial::Serialize(...)
| #spanend
static_assert(MP_MAX == 29,
#spanadd
|
を追加した分のMP_MAX値にする
| #spanend
static_assert(MP_MAX == 33,
#spanadd
|
- UMaterial::PostLoad()
| #spanend
DoMaterialAttributeReorder(&PixelDepthOffset, UE4Ver);
#spanadd
|
の下に追加分
| #spanend
DoMaterialAttributeReorder(&CellShadeParam, UE4Ver);
#spanadd
|
- FExpressionInput* UMaterial::GetExpressionInputForProperty(...)
| #spanend
case MP_PixelDepthOffset: return &PixelDepthOffset;
#spanadd
|
の下に追加分
| #spanend
case MP_CellShadeParam: return &CellShadeParam;
#spanadd
|
- UMaterial::CompilePropertyEx
| #spanend
case MP_PixelDepthOffset: return PixelDepthOffset.CompileWithDefault(Compiler, Property);
#spanadd
|
の下に追加分
| #spanend
case MP_CellShadeParam: return CellShadeParam.CompileWithDefault(Compiler, Property);
#spanadd
|
- bool UMaterial::IsPropertyActive(EMaterialProperty InProperty) const
| #spanend
case MP_PixelDepthOffset:
Active = !bIsTranslucentBlendMode;
break;
#spanadd
|
の下に追加。このピンを使用するShadingModelを記述する。
| #spanend
case MP_CellShadeParam:
Active = ShadingModel == MSM_Cell || ShadingModel == MSM_CellSaturation || ShadingModel == MSM_CellEye || ShadingModel == MSM_CellHair || ShadingModel == MSM_CellHairSaturation || ShadingModel == MSM_CellOutline;
break;
#spanadd
|
- Engine\Source\Runtime\Engine\Private\Materials\MaterialExpressions.cpp
- int32 UMaterialExpressionMakeMaterialAttributes::Compile(...)
- UMaterialExpressionBreakMaterialAttributes::UMaterialExpressionBreakMaterialAttributes(...)
| #spanend
static_assert(MP_MAX == 29,
#spanadd
|
を追加した分のMP_MAX値にする
| #spanend
static_assert(MP_MAX == 33,
#spanadd
|
- UMaterialExpressionBreakMaterialAttributes::UMaterialExpressionBreakMaterialAttributes
| #spanend
Outputs.Add(FExpressionOutput(TEXT("PixelDepthOffset"), 1, 1, 1, 1, 0));
#spanadd
|
の下に追加分。
| #spanend
Outputs.Add(FExpressionOutput(TEXT("CellShadeParam"), 1, 1, 1, 1, 0));
#spanadd
|
- int32 UMaterialExpressionBreakMaterialAttributes::Compile
| #spanend
PropertyToIOIndexMap.Add(MP_PixelDepthOffset, 24);
#spanadd
|
の下に追加分
| #spanend
PropertyToIOIndexMap.Add(MP_CellShadeParam, 25);
#spanadd
|
- Engine\Source\Runtime\Engine\Private\Materials\MaterialShared.cpp
- void FMaterialAttributeDefinitionMap::InitializeAttributeMap()
| #spanend
Add(FGuid(0x0AC97EC3, 0xE3D047BA, 0xB610167D, 0xC4D919FF), TEXT("PixelDepthOffset"), MP_PixelDepthOffset, MCT_Float1, FVector4(0,0,0,0), SF_Pixel);
#spanadd
|
の下に追加分。GUIDは被ってはいけない。ピンの初期値もここ。
| #spanend
Add(FGuid(0x0AC97EC4, 0xE3D047BE, 0xB610168C, 0xC4D91203), TEXT("CellShadeParam"), MP_CellShadeParam, MCT_Float4, FVector4(0, 1, 0, 0), SF_Pixel);
#spanadd
|
- Engine\Source\Runtime\Engine\Classes\Materials\MaterialExpressionMakeMaterialAttributes.h
| #spanend
FExpressionInput PixelDepthOffset;
#spanadd
|
の下に追加するパラメーターの変数を追加する
| #spanend
UPROPERTY()
FExpressionInput CellShadeParam;
#spanadd
|
- Engine\Source\Runtime\Engine\Private\Materials\HLSLMaterialTranslator.h
- FHLSLMaterialTranslator(...)
| #spanend
SharedPixelProperties[MP_PixelDepthOffset] = true;
#spanadd
|
の下に追加するパラメーターの分初期化を追加
| #spanend
SharedPixelProperties[MP_CellShadeParam] = true;
#spanadd
|
- bool Translate()
| #spanend
Chunk[MP_PixelDepthOffset] = Material->CompilePropertyAndSetMaterialProperty(MP_PixelDepthOffset,this);
#spanadd
|
の下に追加するパラメーターの分、値の取得を追加
| #spanend
Chunk[MP_CellShadeParam] = Material->CompilePropertyAndSetMaterialProperty(MP_CellShadeParam, this);
#spanadd
|
- Engine\Source\Editor\UnrealEd\Private\MaterialGraph.cpp
| #spanend
MaterialInputs.Add(FMaterialInputInfo(LOCTEXT("PixelDepthOffset", "Pixel Depth Offset"), MP_PixelDepthOffset, LOCTEXT( "PixelDepthOffsetToolTip", "Pixel Depth Offset" ) ));
#spanadd
|
の下に追加
| #spanend
MaterialInputs.Add(FMaterialInputInfo(LOCTEXT("CellShadeParam", "Cell Shading Param"), MP_CellShadeParam, LOCTEXT("CellShadeParamToolTip", "Cell Shading Param")));
#spanadd
|
- シェーダーからマテリアルのパラメーターを取得する
Engine\Shaders\MaterialTemplate.usf
こんな感じ
-
|
!
-
|
!
| #spanend
half4 GetMaterialCellShadeParamRaw(FPixelMaterialInputs PixelMaterialInputs)
{
return PixelMaterialInputs.CellShadeParam;
}
half4 GetMaterialCellShadeParam(FPixelMaterialInputs PixelMaterialInputs)
{
return GetMaterialCellShadeParamRaw(PixelMaterialInputs);
}
#spanadd
|
|