mirror of
https://github.com/Eragon-Brisingr/UShaderLab.git
synced 2026-09-15 23:04:37 +00:00
52 lines
2.9 KiB
C++
52 lines
2.9 KiB
C++
// Copyright UShaderLab. All Rights Reserved.
|
|
//
|
|
// Mesh / surface attribute intrinsics (vertex normals/tangents, colors, UVs).
|
|
|
|
#include "ShaderLabIntrinsics.h"
|
|
|
|
#include "Materials/MaterialExpressionLightmapUVs.h"
|
|
#include "Materials/MaterialExpressionPixelNormalWS.h"
|
|
#include "Materials/MaterialExpressionPreSkinnedNormal.h"
|
|
#include "Materials/MaterialExpressionPreSkinnedPosition.h"
|
|
#include "Materials/MaterialExpressionTextureCoordinate.h"
|
|
#include "Materials/MaterialExpressionTwoSidedSign.h"
|
|
#include "Materials/MaterialExpressionVertexColor.h"
|
|
#include "Materials/MaterialExpressionVertexNormalWS.h"
|
|
#include "Materials/MaterialExpressionVertexTangentWS.h"
|
|
|
|
void RegisterMeshIntrinsics(FShaderLabIntrinsicRegistry& Registry)
|
|
{
|
|
using namespace ShaderLabIntrinsic_Private;
|
|
using EFreq = EShaderLabIntrinsicFrequency;
|
|
|
|
AddSimple(Registry, TEXT("VertexNormalWS"), EFreq::Any, TEXT("float3"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionVertexNormalWS>(M); });
|
|
AddSimple(Registry, TEXT("VertexTangentWS"), EFreq::Any, TEXT("float3"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionVertexTangentWS>(M); });
|
|
AddSimple(Registry, TEXT("PixelNormalWS"), EFreq::PixelOnly, TEXT("float3"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionPixelNormalWS>(M); });
|
|
AddSimple(Registry, TEXT("VertexColor"), EFreq::Any, TEXT("float4"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionVertexColor>(M); });
|
|
AddSimple(Registry, TEXT("TwoSidedSign"), EFreq::Any, TEXT("float"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionTwoSidedSign>(M); });
|
|
AddSimple(Registry, TEXT("LightmapUVs"), EFreq::Any, TEXT("float2"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionLightmapUVs>(M); });
|
|
AddSimple(Registry, TEXT("PreSkinnedNormal"), EFreq::Any, TEXT("float3"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionPreSkinnedNormal>(M); });
|
|
AddSimple(Registry, TEXT("PreSkinnedPosition"), EFreq::Any, TEXT("float3"), [](UMaterial& M) { return MakeSimple<UMaterialExpressionPreSkinnedPosition>(M); });
|
|
|
|
// TextureCoordinate(Index[, UTiling, VTiling]) — const args configure the node.
|
|
{
|
|
FShaderLabIntrinsicDesc Desc;
|
|
Desc.Name = FName(TEXT("TextureCoordinate"));
|
|
Desc.ReturnType = TEXT("float2");
|
|
Desc.Params = { { TEXT("int"), TEXT("Index"), TEXT("") },
|
|
{ TEXT("float"), TEXT("UTiling"), TEXT("1") },
|
|
{ TEXT("float"), TEXT("VTiling"), TEXT("1") } };
|
|
Desc.Doc = TEXT("UV channel `Index`, optionally tiled.");
|
|
Desc.MakeNode = [](UMaterial& M, const TArray<FString>& Args, FString&) -> UMaterialExpression*
|
|
{
|
|
UMaterialExpressionTextureCoordinate* E = NewObject<UMaterialExpressionTextureCoordinate>(&M);
|
|
if (Args.Num() >= 1) { E->CoordinateIndex = FCString::Atoi(*Args[0]); }
|
|
if (Args.Num() >= 2) { E->UTiling = FCString::Atof(*Args[1]); }
|
|
if (Args.Num() >= 3) { E->VTiling = FCString::Atof(*Args[2]); }
|
|
M.GetExpressionCollection().AddExpression(E);
|
|
return E;
|
|
};
|
|
Registry.Register(MoveTemp(Desc));
|
|
}
|
|
}
|