Files
UnrealEngine/Engine/Source/Developer/MeshBuilderCommon/Private/NaniteHelper.cpp
2025-05-18 13:04:45 +08:00

34 lines
1.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "NaniteHelper.h"
#include "Engine/EngineTypes.h"
#include "HAL/IConsoleManager.h"
namespace Nanite
{
void CorrectFallbackSettings(FMeshNaniteSettings& NaniteSettings, int32 NumTris, bool bIsAssembly, bool bIsRayTracing)
{
static const auto CVarFallbackThreshold = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.Nanite.Builder.FallbackTriangleThreshold"));
static const auto CVarFallbackTargetAutoRelativeError = IConsoleManager::Get().FindTConsoleVariableDataFloat(TEXT("r.Nanite.Builder.FallbackTargetAutoRelativeError"));
static const auto CVarRayTracingProxyFallbackTargetAutoRelativeError = IConsoleManager::Get().FindTConsoleVariableDataFloat(TEXT("r.Nanite.Builder.RayTracingProxy.FallbackTargetAutoRelativeError"));
const float AutoRelativeError = bIsRayTracing ? CVarRayTracingProxyFallbackTargetAutoRelativeError->GetValueOnAnyThread() : CVarFallbackTargetAutoRelativeError->GetValueOnAnyThread();
switch (NaniteSettings.FallbackTarget)
{
case ENaniteFallbackTarget::Auto:
NaniteSettings.FallbackPercentTriangles = 1.0f;
NaniteSettings.FallbackRelativeError = (!bIsAssembly && NumTris <= CVarFallbackThreshold->GetValueOnAnyThread()) ? 0.0f : AutoRelativeError;
break;
case ENaniteFallbackTarget::PercentTriangles:
NaniteSettings.FallbackRelativeError = 0.0f;
break;
case ENaniteFallbackTarget::RelativeError:
NaniteSettings.FallbackPercentTriangles = 1.0f;
break;
}
}
}