// Copyright UShaderLab. All Rights Reserved. // // Per-instance intrinsics. #include "ShaderLabIntrinsics.h" #include "Materials/MaterialExpressionPerInstanceCustomData.h" #include "Materials/MaterialExpressionPerInstanceFadeAmount.h" #include "Materials/MaterialExpressionPerInstanceRandom.h" void RegisterInstancingIntrinsics(FShaderLabIntrinsicRegistry& Registry) { using namespace ShaderLabIntrinsic_Private; using EFreq = EShaderLabIntrinsicFrequency; AddSimple(Registry, TEXT("PerInstanceRandom"), EFreq::Any, TEXT("float"), [](UMaterial& M) { return MakeSimple(M); }); AddSimple(Registry, TEXT("PerInstanceFadeAmount"), EFreq::Any, TEXT("float"), [](UMaterial& M) { return MakeSimple(M); }); // PerInstanceCustomData(DataIndex[, ConstDefaultValue]) — const args + optional input pin at default. { FShaderLabIntrinsicDesc Desc; Desc.Name = FName(TEXT("PerInstanceCustomData")); Desc.ReturnType = TEXT("float"); Desc.Params = { { TEXT("int"), TEXT("DataIndex"), TEXT("") }, { TEXT("float"), TEXT("ConstDefaultValue"), TEXT("0") } }; Desc.MakeNode = [](UMaterial& M, const TArray& Args, FString&) -> UMaterialExpression* { UMaterialExpressionPerInstanceCustomData* E = NewObject(&M); if (Args.Num() >= 1) { E->DataIndex = static_cast(FCString::Atoi(*Args[0])); } if (Args.Num() >= 2) { E->ConstDefaultValue = FCString::Atof(*Args[1]); } M.GetExpressionCollection().AddExpression(E); return E; }; Registry.Register(MoveTemp(Desc)); } }