// Copyright UShaderLab. All Rights Reserved. // // Atmosphere / sky-light intrinsics. #include "ShaderLabIntrinsics.h" #include "Materials/MaterialExpressionAtmosphericLightColor.h" #include "Materials/MaterialExpressionAtmosphericLightVector.h" #include "Materials/MaterialExpressionSkyAtmosphereLightDirection.h" void RegisterAtmosphereIntrinsics(FShaderLabIntrinsicRegistry& Registry) { using namespace ShaderLabIntrinsic_Private; using EFreq = EShaderLabIntrinsicFrequency; AddSimple(Registry, TEXT("AtmosphericLightVector"), EFreq::Any, TEXT("float3"), [](UMaterial& M) { return MakeSimple(M); }); AddSimple(Registry, TEXT("AtmosphericLightColor"), EFreq::Any, TEXT("float3"), [](UMaterial& M) { return MakeSimple(M); }); // SkyAtmosphereLightDirection(LightIndex) — const int selects the atmosphere light. { FShaderLabIntrinsicDesc Desc; Desc.Name = FName(TEXT("SkyAtmosphereLightDirection")); Desc.ReturnType = TEXT("float3"); Desc.Params = { { TEXT("int"), TEXT("LightIndex"), TEXT("0") } }; Desc.MakeNode = [](UMaterial& M, const TArray& Args, FString&) -> UMaterialExpression* { UMaterialExpressionSkyAtmosphereLightDirection* E = NewObject(&M); if (Args.Num() >= 1) { E->LightIndex = FCString::Atoi(*Args[0]); } M.GetExpressionCollection().AddExpression(E); return E; }; Registry.Register(MoveTemp(Desc)); } }