Upgrade CARLA code to work with UE5.5 (#8346)

* Adapt toolchain file to UE versions other than 5.3.

* More 5.5-related fixes.

* Remove unused SetFolderName call and fix GetRenderQuery call.

* Fix several deprecation warnings.

* More deprecation fixes.

* Upgrade enum to string code.

* Add a check for null weather.

* Update readme with UE5.5

---------

Co-authored-by: PabloVD <pablo.villanueva.domingo@gmail.com>
This commit is contained in:
MarcelPiNacy-CVC 2024-11-07 14:15:18 +01:00 committed by GitHub
parent 2b2a2a1b83
commit ed13b406b2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
40 changed files with 280 additions and 164 deletions

View File

@ -106,9 +106,30 @@ endif ()
# RTTI Definitions
# ================================
if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC" AND
NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if (ENABLE_RTTI)
set (RTTI_FLAG /GR)
else ()
set (RTTI_FLAG /GR-)
endif ()
else ()
if (ENABLE_RTTI)
set (RTTI_FLAG -frtti)
else ()
set (RTTI_FLAG -fno-rtti)
endif ()
endif ()
carla_message ("Checking for ${RTTI_FLAG} support")
check_cxx_compiler_flag (${RTTI_FLAG} HAS_RTTI_FLAG)
if (HAS_RTTI_FLAG)
add_compile_options (${RTTI_FLAG})
endif ()
set (CARLA_RTTI_DEFINITIONS)
if (CARLA_RTTI_DEFINITIONS)
if (ENABLE_RTTI)
# Nothing
else ()
list (APPEND CARLA_RTTI_DEFINITIONS BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY)

View File

@ -258,7 +258,7 @@ endif ()
if (BUILD_CARLA_UNREAL)
if (BUILD_CARLA_UNREAL AND ENABLE_STREETMAP)
# ==== STREETMAP ====
carla_dependency_add (
StreetMap

View File

@ -33,9 +33,29 @@ elseif (${ARCH} STREQUAL "aarch64")
set (TARGET_TRIPLE "aarch64-unknown-linux-gnueabi" CACHE STRING "")
endif()
file (
GLOB
UE_SYSROOT_CANDIDATES
${UE_ROOT}/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v*_clang-*.*.*-*/${TARGET_TRIPLE}
LIST_DIRECTORIES TRUE
FOLLOW_SYMLINKS
)
set (UE_SYSROOT_CANDIDATE)
foreach (CANDIDATE ${UE_SYSROOT_CANDIDATES})
if (IS_DIRECTORY ${CANDIDATE})
set (UE_SYSROOT_CANDIDATE ${CANDIDATE})
break ()
endif ()
endforeach ()
if (NOT UE_SYSROOT_CANDIDATE)
message (FATAL_ERROR "Could not find Unreal Engine clang sysroot.")
endif ()
set (
UE_SYSROOT
${UE_ROOT}/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v22_clang-16.0.6-centos7/${TARGET_TRIPLE}
${UE_SYSROOT_CANDIDATE}
CACHE PATH ""
)

View File

@ -89,7 +89,7 @@ carla_option (
carla_option (
ENABLE_RTTI
"Enable C++ RTTI."
OFF
ON
)
carla_option (
@ -146,6 +146,12 @@ carla_option (
OFF
)
carla_option (
ENABLE_STREETMAP
"Whether to download the Streetmap UE plugin."
OFF
)
# ================================

View File

@ -117,7 +117,7 @@ if (BUILD_CARLA_SERVER)
)
target_link_libraries (
carla-server PUBLIC
carla-server PUBLIC SYSTEM
Boost::asio
Boost::geometry
Boost::algorithm

View File

@ -17,7 +17,7 @@ environmental conditions.
[![CARLA Video](Docs/img/carla_ue5_readme_img.webp)](https://www.youtube.com/watch?v=q4V9GYjA1pE)
>[!NOTE]
> This is the development branch `ue5-dev` for the **Unreal Engine 5.3 version of CARLA**. This branch exists in parallel with the Unreal Engine 4.26 version of CARLA, in the `ue4-dev` branch. Please be sure that this version of CARLA is suitable for your needs as there are significant differences between the UE 5.3 and UE 4.26 versions of CARLA.
> This is the development branch `ue5-dev` for the **Unreal Engine 5.5 version of CARLA**. This branch exists in parallel with the Unreal Engine 4.26 version of CARLA, in the `ue4-dev` branch. Please be sure that this version of CARLA is suitable for your needs as there are significant differences between the UE 5.5 and UE 4.26 versions of CARLA.
### Recommended system
@ -27,7 +27,7 @@ environmental conditions.
* Ubuntu 22.04
>[!NOTE]
> Ubuntu version 22.04 is required, the Unreal Engine 5.3 version of CARLA will not work on Ubuntu 20.04 or lower.
> Ubuntu version 22.04 is required, the Unreal Engine 5.5 version of CARLA will not work on Ubuntu 20.04 or lower.
## Documentation
@ -77,7 +77,7 @@ Felipe Codevilla, Antonio Lopez, Vladlen Koltun; PMLR 78:1-16
}
```
Building CARLA with Unreal Engine 5.3
Building CARLA with Unreal Engine 5.5
--------------
Clone this repository locally from GitHub:
@ -102,7 +102,7 @@ cd CarlaUE5
Setup.bat
```
This will download and install Unreal Engine 5.3, install the prerequisite requirements and build and launch CARLA. It may take some time to complete and use a significant amount of disk space. For further instructions on building in Linux can be found [here][buildlinuxlink] and the instructions for building in Windows can be found [here][buildwindowslink].
This will download and install Unreal Engine 5.5, install the prerequisite requirements and build and launch CARLA. It may take some time to complete and use a significant amount of disk space. For further instructions on building in Linux can be found [here][buildlinuxlink] and the instructions for building in Windows can be found [here][buildwindowslink].
[buildlinuxlink]: https://carla.readthedocs.io/en/latest/build_linux_ue5/
[buildwindowslink]: https://carla.readthedocs.io/en/latest/build_windows_ue5/

View File

@ -51,7 +51,7 @@ target_compile_definitions (
)
target_link_libraries (
carla-ros2-native
carla-ros2-native PUBLIC SYSTEM
${CMAKE_INSTALL_PREFIX}/lib/libfastrtps.so
)

View File

@ -53,10 +53,6 @@
"Name": "SunPosition",
"Enabled": true
},
{
"Name": "StreetMap",
"Enabled": true
},
{
"Name": "ModelingToolsEditorMode",
"Enabled": true,

View File

@ -19,8 +19,7 @@ GlobalDefaultServerGameMode=/Game/Carla/Blueprints/Game/CarlaGameMode.CarlaGameM
[/Script/Engine.RendererSettings]
r.DefaultFeature.MotionBlur=True
r.BasePassOutputsVelocity=True
r.BasePassForceOutputsVelocity=False
r.VelocityOutputPass=True
r.AllowStaticLighting=True
r.DiscardUnusedQuality=True
r.DefaultFeature.Bloom=False

View File

@ -14,6 +14,7 @@
#include "PhysicsEngine/BodySetup.h"
#include "Engine/StaticMeshActor.h"
#include "Carla/Actor/LevelActor/InstancedStaticMeshActor.h"
#include "UObject/SavePackage.h"
#if WITH_EDITOR
#include "Editor/EditorEngine.h"
#include "Editor/Transactor.h"
@ -185,7 +186,26 @@ UStaticMesh* UMapGenFunctionLibrary::CreateMesh(
// Notify asset registry of new asset
FAssetRegistryModule::AssetCreated(Mesh);
//UPackage::SavePackage(Package, Mesh, EObjectFlags::RF_Public | EObjectFlags::RF_Standalone, *(MeshName.ToString()), GError, nullptr, true, true, SAVE_NoError);
/*
FSavePackageArgs SaveArgs;
SaveArgs.TopLevelFlags =
EObjectFlags::RF_Public |
EObjectFlags::RF_Standalone;
SaveArgs.Error = GError;
SaveArgs.bForceByteSwapping = true;
SaveArgs.bWarnOfLongFilename = true;
SaveArgs.SaveFlags = SAVE_NoError;
UPackage::SavePackage(
Package,
Mesh,
*(MeshName.ToString()),
SaveArgs);
*/
Package->MarkPackageDirty();
return Mesh;
}

View File

@ -39,6 +39,7 @@ public class Carla :
PrivatePCHHeaderFile = "Carla.h";
bEnableExceptions = true;
bUseRTTI = true;
void AddDynamicLibrary(string library)
{

View File

@ -60,7 +60,7 @@ ACityMapGenerator::~ACityMapGenerator() {}
// -- Overriden from UObject ---------------------------------------------------
// =============================================================================
void ACityMapGenerator::PreSave(const ITargetPlatform *TargetPlatform)
void ACityMapGenerator::PreSave(FObjectPreSaveContext ObjectSaveContext)
{
#if WITH_EDITOR
if (bGenerateRoadMapOnSave) {
@ -73,7 +73,7 @@ void ACityMapGenerator::PreSave(const ITargetPlatform *TargetPlatform)
}
#endif // WITH_EDITOR
Super::PreSave(TargetPlatform);
Super::PreSave(ObjectSaveContext);
}
// =============================================================================

View File

@ -7,10 +7,11 @@
#pragma once
#include "MapGen/CityMapMeshHolder.h"
#include "MapGen/DoublyConnectedEdgeList.h"
#include "MapGen/GraphParser.h"
#include "UObject/ObjectSaveContext.h"
#include "CityMapGenerator.generated.h"
class URoadMap;
@ -40,7 +41,7 @@ public:
/// @{
public:
virtual void PreSave(const ITargetPlatform *TargetPlatform) override;
virtual void PreSave(FObjectPreSaveContext ObjectSaveContext) override;
/// @}
// ===========================================================================

View File

@ -20,6 +20,8 @@
#include "UObject/ConstructorHelpers.h"
#include "Materials/MaterialInstanceConstant.h"
#include "Carla/MapGen/LargeMapManager.h"
#include "UObject/SavePackage.h"
#include "UObject/Package.h"
static bool ValidateStaticMesh(UStaticMesh *Mesh)
{
@ -334,7 +336,6 @@ bool UPrepareAssetsForCookingCommandlet::SaveWorld(
{
// Create Package to save
UPackage *Package = AssetData.GetPackage();
Package->SetFolderName(*WorldName);
Package->FullyLoad();
Package->MarkPackageDirty();
FAssetRegistryModule::AssetCreated(World);
@ -475,16 +476,20 @@ bool UPrepareAssetsForCookingCommandlet::SavePackage(const FString &PackagePath,
return false;
}
FSavePackageArgs SaveArgs;
SaveArgs.TopLevelFlags =
EObjectFlags::RF_Public |
EObjectFlags::RF_Standalone;
SaveArgs.Error = GError;
SaveArgs.bForceByteSwapping = true;
SaveArgs.bWarnOfLongFilename = true;
SaveArgs.SaveFlags = SAVE_NoError;
return UPackage::SavePackage(
Package,
World,
EObjectFlags::RF_Public | EObjectFlags::RF_Standalone,
*PackageFileName,
GError,
nullptr,
true,
true,
SAVE_NoError);
SaveArgs);
}
void UPrepareAssetsForCookingCommandlet::GenerateMapPathsFile(

View File

@ -286,7 +286,7 @@ UTexture2D* ACarlaGameModeBase::CreateUETexture(const carla::rpc::TextureColor&
}
}
UTexture2D* UETexture = UTexture2D::CreateTransient(Texture.GetWidth(), Texture.GetHeight(), EPixelFormat::PF_B8G8R8A8);
FTexture2DMipMap& Mip = UETexture->PlatformData->Mips[0];
FTexture2DMipMap& Mip = UETexture->GetPlatformData()->Mips[0];
void* Data = Mip.BulkData.Lock( LOCK_READ_WRITE );
FMemory::Memcpy( Data,
&Colors[0],
@ -309,7 +309,7 @@ UTexture2D* ACarlaGameModeBase::CreateUETexture(const carla::rpc::TextureFloatCo
}
}
UTexture2D* UETexture = UTexture2D::CreateTransient(Texture.GetWidth(), Texture.GetHeight(), EPixelFormat::PF_FloatRGBA);
FTexture2DMipMap& Mip = UETexture->PlatformData->Mips[0];
FTexture2DMipMap& Mip = UETexture->GetPlatformData()->Mips[0];
void* Data = Mip.BulkData.Lock( LOCK_READ_WRITE );
FMemory::Memcpy( Data,
&Colors[0],

View File

@ -58,7 +58,7 @@ void ACityMapMeshHolder::PostInitializeComponents()
{
Super::PostInitializeComponents();
if (IsValid(GetLevel()) && !GetLevel()->IsPendingKill())
if (IsValid(GetLevel()) && IsValidChecked(GetLevel()))
{
TArray<AActor*> roadpieces;
GetAttachedActors(roadpieces);

View File

@ -23,8 +23,6 @@ uint32 CityMapMeshTag::GetRoadIntersectionSize()
FString CityMapMeshTag::ToString(ECityMapMeshTag Tag)
{
const UEnum* ptr = FindObject<UEnum>(ANY_PACKAGE, TEXT("ECityMapMeshTag"), true);
if(!ptr)
return FString("Invalid");
return ptr->GetNameStringByIndex(static_cast<int32>(Tag));
static_assert(TIsEnumClass<ECityMapMeshTag>::Value);
return StaticEnum<ECityMapMeshTag>()->GetNameStringByValue((int64)Tag);
}

View File

@ -677,12 +677,12 @@ FCarlaMapTile& ALargeMapManager::LoadCarlaMapTile(FString TileMapPath, TileID Ti
StreamingLevel->LevelTransform = FTransform(TileLocation);
StreamingLevel->PackageNameToLoad = *FullName;
if (!FPackageName::DoesPackageExist(FullName, NULL, &PackageFileName))
if (!FPackageName::DoesPackageExist(FullName, &PackageFileName))
{
LM_LOG(Error, "Level does not exist in package with FullName variable -> %s", *FullName);
}
if (!FPackageName::DoesPackageExist(LongLevelPackageName, NULL, &PackageFileName))
if (!FPackageName::DoesPackageExist(LongLevelPackageName, &PackageFileName))
{
LM_LOG(Error, "Level does not exist in package with LongLevelPackageName variable -> %s", *LongLevelPackageName);
}

View File

@ -169,11 +169,23 @@ UOpenDriveMap *UOpenDrive::LoadOpenDriveMap(const FString &MapName)
UOpenDriveMap *UOpenDrive::LoadCurrentOpenDriveMap(const UObject *WorldContextObject)
{
UWorld *World = nullptr;
#if WITH_EDITOR
GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
if (WorldContextObject == nullptr)
return nullptr;
auto World = GEngine->GetWorldFromContextObject(
WorldContextObject,
EGetWorldErrorMode::LogAndReturnNull);
if (World == nullptr)
return nullptr;
return LoadOpenDriveMap(World->GetMapName());
#else
return nullptr;
#endif
return World != nullptr ?
LoadOpenDriveMap(World->GetMapName()) :
nullptr;
}

View File

@ -131,7 +131,7 @@ void ADVSCamera::PostPhysTick(UWorld *World, ELevelTick TickType, float DeltaTim
TRACE_CPUPROFILER_EVENT_SCOPE(ADVSCamera::PostPhysTick);
Super::PostPhysTick(World, TickType, DeltaTime);
check(CaptureRenderTarget != nullptr);
if (!HasActorBegunPlay() || IsPendingKill())
if (!HasActorBegunPlay() || IsValid(this))
{
return;
}

View File

@ -38,56 +38,14 @@ namespace ImageUtil
TArrayView<FLinearColor> Out)
{
SourcePitch *= GPixelFormats[Format].BlockBytes;
auto OutPixelCount = Extent.X * Extent.Y;
switch (Format)
{
case PF_G16:
case PF_R16_UINT:
case PF_R16_SINT:
// Shadow maps
ConvertRawR16DataToFLinearColor(Extent.X, Extent.Y, (uint8*)PixelData, SourcePitch, Out.GetData());
break;
case PF_R8G8B8A8:
ConvertRawR8G8B8A8DataToFLinearColor(Extent.X, Extent.Y, (uint8*)PixelData, SourcePitch, Out.GetData());
break;
case PF_B8G8R8A8:
ConvertRawB8G8R8A8DataToFLinearColor(Extent.X, Extent.Y, (uint8*)PixelData, SourcePitch, Out.GetData());
break;
case PF_A2B10G10R10:
ConvertRawA2B10G10R10DataToFLinearColor(Extent.X, Extent.Y, (uint8*)PixelData, SourcePitch, Out.GetData());
break;
case PF_FloatRGBA:
case PF_R16G16B16A16_UNORM:
case PF_R16G16B16A16_SNORM:
ConvertRawR16G16B16A16FDataToFLinearColor(Extent.X, Extent.Y, (uint8*)PixelData, SourcePitch, Out.GetData(), Flags);
break;
case PF_FloatR11G11B10:
ConvertRawRR11G11B10DataToFLinearColor(Extent.X, Extent.Y, (uint8*)PixelData, SourcePitch, Out.GetData());
break;
case PF_A32B32G32R32F:
ConvertRawR32G32B32A32DataToFLinearColor(Extent.X, Extent.Y, (uint8*)PixelData, SourcePitch, Out.GetData(), Flags);
break;
case PF_A16B16G16R16:
ConvertRawR16G16B16A16DataToFLinearColor(Extent.X, Extent.Y, (uint8*)PixelData, SourcePitch, Out.GetData());
break;
case PF_G16R16:
ConvertRawR16G16DataToFLinearColor(Extent.X, Extent.Y, (uint8*)PixelData, SourcePitch, Out.GetData());
break;
case PF_X24_G8: // Depth Stencil
ConvertRawR24G8DataToFLinearColor(Extent.X, Extent.Y, (uint8*)PixelData, SourcePitch, Out.GetData(), Flags);
break;
case PF_R32_FLOAT: // Depth Stencil
ConvertRawR32DataToFLinearColor(Extent.X, Extent.Y, (uint8*)PixelData, SourcePitch, Out.GetData(), Flags);
break;
case PF_R16G16B16A16_UINT:
case PF_R16G16B16A16_SINT:
ConvertRawR16G16B16A16DataToFLinearColor(Extent.X, Extent.Y, (uint8*)PixelData, SourcePitch, Out.GetData());
break;
default:
UE_LOG(LogCarla, Warning, TEXT("Unsupported format %llu"), (unsigned long long)Format);
return false;
}
return true;
return ConvertRAWSurfaceDataToFLinearColor(
Format,
Extent.X,
Extent.Y,
(uint8*)PixelData,
SourcePitch,
Out.GetData(),
Flags);
}
@ -143,7 +101,17 @@ namespace ImageUtil
ConvertRawR24G8DataToFColor(Extent.X, Extent.Y, (uint8*)PixelData, SourcePitch, Out.GetData(), Flags);
break;
case PF_R32_FLOAT: // Depth
ConvertRawR32DataToFColor(Extent.X, Extent.Y, (uint8*)PixelData, SourcePitch, Out.GetData(), Flags);
for (uint32 Y = 0; Y < Extent.Y; Y++)
{
auto SrcPtr = (float*)((uint8*)PixelData + Y * SourcePitch);
auto DestPtr = Out.GetData() + Y * Extent.X;
for (uint32 X = 0; X < Extent.X; X++)
{
*DestPtr = FLinearColor(SrcPtr[0], 0.f, 0.f, 1.f).QuantizeRound();
++SrcPtr;
++DestPtr;
}
}
break;
case PF_R16G16B16A16_UINT:
case PF_R16G16B16A16_SINT:
@ -244,7 +212,7 @@ namespace ImageUtil
auto& CmdList = FRHICommandListImmediate::Get();
auto Resource = static_cast<FTextureRenderTarget2DResource*>(
RenderTarget.Resource);
RenderTarget.GetResource());
auto Texture = Resource->GetRenderTargetTexture();
if (Texture == nullptr)
return;

View File

@ -27,8 +27,8 @@ void FPixelReader::WritePixelsToBuffer(
check(IsInRenderingThread());
auto RenderResource =
static_cast<const FTextureRenderTarget2DResource *>(RenderTarget.Resource);
FTexture2DRHIRef Texture = RenderResource->GetRenderTargetTexture();
static_cast<const FTextureRenderTarget2DResource *>(RenderTarget.GetResource());
auto Texture = RenderResource->GetRenderTargetTexture();
if (!Texture)
{
return;
@ -53,7 +53,7 @@ void FPixelReader::WritePixelsToBuffer(
RHICmdList.ImmediateFlush(EImmediateFlushType::FlushRHIThread);
TRACE_CPUPROFILER_EVENT_SCOPE_STR("query result");
uint64 OldAbsTime = 0;
RHICmdList.GetRenderQueryResult(Query, OldAbsTime, true);
RHIGetRenderQueryResult(Query, OldAbsTime, true);
}
AsyncTask(ENamedThreads::HighTaskPriority, [=, Readback=std::move(BackBufferReadback)]() mutable {

View File

@ -100,7 +100,7 @@ void FPixelReader::SendPixelsInRenderThread(TSensor &Sensor, bool use16BitFormat
TRACE_CPUPROFILER_EVENT_SCOPE(FPixelReader::SendPixelsInRenderThread);
check(Sensor.CaptureRenderTarget != nullptr);
if (!Sensor.HasActorBegunPlay() || Sensor.IsPendingKill())
if (!Sensor.HasActorBegunPlay() || IsValidChecked(&Sensor))
{
return;
}
@ -118,13 +118,14 @@ void FPixelReader::SendPixelsInRenderThread(TSensor &Sensor, bool use16BitFormat
TRACE_CPUPROFILER_EVENT_SCOPE_STR("FWritePixels_SendPixelsInRenderThread");
/// @todo Can we make sure the sensor is not going to be destroyed?
if (!Sensor.IsPendingKill())
if (IsValidChecked(&Sensor))
{
FPixelReader::Payload FuncForSending =
[&Sensor, Frame = FCarlaEngine::GetFrameCounter(), Conversor = std::move(Conversor)]
(void *LockedData, uint32 Size, uint32 Offset, uint32 ExpectedRowBytes)
{
if (Sensor.IsPendingKill()) return;
if (!IsValidChecked(&Sensor))
return;
TArray<TPixel> Converted;

View File

@ -20,8 +20,6 @@ void FPostProcessConfig::EnablePostProcessingEffects()
EngineShowFlags.SetLightShafts(true);
EngineShowFlags.SetPostProcessMaterial(true);
EngineShowFlags.SetDistanceFieldAO(true);
// TODO: Remove when Physical page pool size scales automatically with demand
EngineShowFlags.SetVirtualShadowMapCaching(false);
// } must be kept in sync with EngineShowFlags.EnableAdvancedFeatures(), AND activate Lumen.
EngineShowFlags.SetMotionBlur(true);
}
@ -84,7 +82,6 @@ void FPostProcessConfig::DisablePostProcessingEffects()
// EngineShowFlags.SetLandscape(false);
// EngineShowFlags.SetLargeVertices(false);
EngineShowFlags.SetLensFlares(false);
EngineShowFlags.SetLevelColoration(false);
EngineShowFlags.SetLightComplexity(false);
EngineShowFlags.SetLightFunctions(false);
EngineShowFlags.SetLightInfluences(false);
@ -114,7 +111,6 @@ void FPostProcessConfig::DisablePostProcessingEffects()
// EngineShowFlags.SetPrecomputedVisibilityCells(false);
// EngineShowFlags.SetPreviewShadowsIndicator(false);
// EngineShowFlags.SetPrimitiveDistanceAccuracy(false);
EngineShowFlags.SetPropertyColoration(false);
// EngineShowFlags.SetQuadOverdraw(false);
// EngineShowFlags.SetReflectionEnvironment(false);
// EngineShowFlags.SetReflectionOverride(false);

View File

@ -684,7 +684,7 @@ void ASceneCaptureSensor::BeginPlay()
CaptureRenderTarget->TargetGamma = TargetGamma;
}
check(IsValid(CaptureComponent2D) && !CaptureComponent2D->IsPendingKill());
check(IsValid(CaptureComponent2D) && IsValidChecked(CaptureComponent2D));
CaptureComponent2D->Deactivate();
CaptureComponent2D->TextureTarget = CaptureRenderTarget;

View File

@ -50,12 +50,8 @@ static EQualityLevel QualityLevelFromString(
FString QualityLevelToString(EQualityLevel QualitySettingsLevel)
{
const UEnum *ptr = FindObject<UEnum>(ANY_PACKAGE, TEXT("EQualityLevel"), true);
if (!ptr)
{
return FString("Invalid");
}
return ptr->GetNameStringByIndex(static_cast<int32>(QualitySettingsLevel));
static_assert(TIsEnumClass<EQualityLevel>::Value);
return StaticEnum<EQualityLevel>()->GetNameStringByValue((int64)QualitySettingsLevel);
}
static void LoadSettingsFromConfig(
@ -164,10 +160,10 @@ void UCarlaSettings::LoadSettingsFromString(const FString &INIFileContents)
{
UE_LOG(LogCarla, Log, TEXT("Loading CARLA settings from string"));
FIniFile ConfigFile;
ConfigFile.ProcessInputFileContents(INIFileContents);
CurrentFileName = TEXT("<string-provided-by-client>");
ConfigFile.ProcessInputFileContents(INIFileContents, CurrentFileName);
constexpr bool bLoadCarlaServerSection = false;
LoadSettingsFromConfig(ConfigFile, *this, bLoadCarlaServerSection);
CurrentFileName = TEXT("<string-provided-by-client>");
}
void UCarlaSettings::LogSettings() const

View File

@ -221,7 +221,7 @@ void UCarlaSettingsDelegate::LaunchLowQualityCommands(UWorld *world) const
GEngine->Exec(world, TEXT("r.TranslucentLightingVolume 0"));
GEngine->Exec(world, TEXT("r.LightShaftDownSampleFactor 4"));
GEngine->Exec(world, TEXT("r.OcclusionQueryLocation 1"));
// GEngine->Exec(world,TEXT("r.BasePassOutputsVelocity 0")); //--> readonly
// GEngine->Exec(world,TEXT("r.VelocityOutputPass 0")); //--> readonly
// GEngine->Exec(world,TEXT("r.DetailMode 0")); //-->will change to lods 0
GEngine->Exec(world, TEXT("r.DefaultFeature.AutoExposure 1"));
@ -412,7 +412,7 @@ void UCarlaSettingsDelegate::LaunchEpicQualityCommands(UWorld *world) const
GEngine->Exec(world, TEXT("r.TranslucentLightingVolume 1"));
GEngine->Exec(world, TEXT("r.LightShaftDownSampleFactor 2"));
// GEngine->Exec(world,TEXT("r.OcclusionQueryLocation 0"));
// GEngine->Exec(world,TEXT("r.BasePassOutputsVelocity 0")); //readonly
// GEngine->Exec(world,TEXT("r.VelocityOutputPass 0")); //readonly
GEngine->Exec(world, TEXT("r.DetailMode 2"));
}

View File

@ -16,7 +16,7 @@
static bool IsValid(const ACarlaWheeledVehicle *Vehicle)
{
return ((Vehicle != nullptr) && !Vehicle->IsPendingKill());
return ((Vehicle != nullptr) && IsValidChecked(Vehicle));
}
static ETrafficSignState ToTrafficSignState(ETrafficLightState State)

View File

@ -123,7 +123,7 @@ FBoundingBox UBoundingBoxCalculator::GetVehicleBoundingBox(
crp::CityObjectLabel Tag = ATagger::GetTagOfTaggedComponent(*ParentComp);
if(FilterByTagEnabled && Tag != TagQueried) return {};
USkeletalMesh* SkeletalMesh = ParentComp->SkeletalMesh;
USkeletalMesh* SkeletalMesh = ParentComp->GetSkeletalMeshAsset();
FBoundingBox BB = GetSkeletalMeshBoundingBox(SkeletalMesh);
if(BB.Extent.IsZero())
@ -384,7 +384,7 @@ void UBoundingBoxCalculator::GetBBsOfSkeletalMeshComponents(
if(!Comp->IsVisible() || (FilterByTagEnabled && Tag != TagQueried)) continue;
USkeletalMesh* SkeletalMesh = Comp->SkeletalMesh;
USkeletalMesh* SkeletalMesh = Comp->GetSkeletalMeshAsset();
FBoundingBox BoundingBox = GetSkeletalMeshBoundingBox(SkeletalMesh);
if(BoundingBox.Extent.IsZero())
{

View File

@ -208,7 +208,7 @@ struct FShapeVisitor
Location = LargeMap->GlobalToLocalLocation(Location);
}
ACarlaHUD *Hud = Cast<ACarlaHUD>(PlayerController->GetHUD());
Hud->AddHUDString(carla::rpc::ToFString(Str.text), Location, Color.Quantize(), LifeTime);
Hud->AddHUDString(carla::rpc::ToFString(Str.text), Location, Color.QuantizeRound(), LifeTime);
}
private:

View File

@ -52,14 +52,14 @@ public:
return ConfigFile.Combine(FileName);
}
void ProcessInputFileContents(const FString &INIFileContents)
void ProcessInputFileContents(const FString &INIFileContents, const FString &Hint)
{
ConfigFile.ProcessInputFileContents(INIFileContents);
ConfigFile.ProcessInputFileContents(INIFileContents, Hint);
}
bool HasSection(const FString &Section) const
{
return (ConfigFile.Num() > 0) && (ConfigFile.Find(Section) != nullptr);
return (ConfigFile.Num() > 0) && (ConfigFile.FindSection(Section) != nullptr);
}
void AddSectionIfMissing(const FString &Section)

View File

@ -40,6 +40,7 @@
#include "Async/Async.h"
#include "Async/Future.h"
#include "LandscapeProxy.h"
#include "UObject/SavePackage.h"
#include "Carla/Game/CarlaStatics.h"
@ -930,7 +931,7 @@ void UCustomTerrainPhysicsComponent::UpdateTexture()
region.Width = Texture->GetSizeX();
region.Height = Texture->GetSizeY();
FTexture2DResource* resource = (FTexture2DResource*)Texture->Resource;
FTexture2DResource* resource = (FTexture2DResource*)Texture->GetResource();
RHIUpdateTexture2D(
resource->GetTexture2DRHI(), 0, region, region.Width * sizeof(uint8_t), &NewData[0]);
});
@ -1024,7 +1025,7 @@ void UCustomTerrainPhysicsComponent::UpdateLargeTexture()
region.Width = Texture->GetSizeX();
region.Height = Texture->GetSizeY();
FTexture2DResource* resource = (FTexture2DResource*)Texture->Resource;
FTexture2DResource* resource = (FTexture2DResource*)Texture->GetResource();
RHIUpdateTexture2D(
resource->GetTexture2DRHI(), 0, region, region.Width * sizeof(uint8_t), &NewData[0]);
});
@ -1379,8 +1380,24 @@ void UCustomTerrainPhysicsComponent::BuildLandscapeHeightMapDataAasset(ALandscap
Package->MarkPackageDirty();
// FAssetRegistryModule::AssetCreated(NewTexture);
FString PackageFileName = FPackageName::LongPackageNameToFilename(PackageName, FPackageName::GetAssetPackageExtension());
bool bSaved = UPackage::SavePackage(Package, HeightMapAsset, EObjectFlags::RF_Public | EObjectFlags::RF_Standalone, *PackageFileName, GError, nullptr, true, true, SAVE_NoError);
FSavePackageArgs SaveArgs;
SaveArgs.TopLevelFlags =
EObjectFlags::RF_Public |
EObjectFlags::RF_Standalone;
SaveArgs.Error = GError;
SaveArgs.bForceByteSwapping = true;
SaveArgs.bWarnOfLongFilename = true;
SaveArgs.SaveFlags = SAVE_NoError;
FString PackageFileName = FPackageName::LongPackageNameToFilename(
PackageName,
FPackageName::GetAssetPackageExtension());
bool bSaved = UPackage::SavePackage(
Package,
HeightMapAsset,
*PackageFileName,
SaveArgs);
}

View File

@ -36,10 +36,6 @@
"Name": "ProceduralMeshComponent",
"Enabled": true
},
{
"Name": "StreetMap",
"Enabled": true
},
{
"Name": "ChaosVehiclesPlugin",
"Enabled": true

View File

@ -26,6 +26,7 @@ public class CarlaTools :
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
bEnableExceptions = true;
bUseRTTI = true;
foreach (var Definition in File.ReadAllText(Path.Combine(PluginDirectory, "Definitions.def")).Split(';'))
PrivateDefinitions.Add(Definition.Trim());
@ -100,8 +101,8 @@ public class CarlaTools :
"RHI",
"RenderCore",
"MeshMergeUtilities",
"StreetMapImporting",
"StreetMapRuntime",
// "StreetMapImporting",
// "StreetMapRuntime",
"Chaos",
"ChaosVehicles"
});

View File

@ -35,6 +35,7 @@
#include "UObject/UnrealType.h"
#include "UObject/UObjectGlobals.h"
#include "UObject/ObjectMacros.h"
#include "UObject/SavePackage.h"
#include "Dom/JsonObject.h"
#include "JsonObjectConverter.h"
@ -435,10 +436,23 @@ UWorld* UMapGeneratorWidget::DuplicateWorld(FString BaseWorldPath, FString Targe
DuplicateWorld = CastChecked<UWorld>(StaticDuplicateObjectEx(Parameters));
const FString PackageFileName = FPackageName::LongPackageNameToFilename(
PackageName,
FPackageName::GetMapPackageExtension());
UPackage::SavePackage(WorldPackage, DuplicateWorld, EObjectFlags::RF_Public | EObjectFlags::RF_Standalone,
*PackageFileName, GError, nullptr, true, true, SAVE_NoError);
PackageName,
FPackageName::GetMapPackageExtension());
FSavePackageArgs SaveArgs;
SaveArgs.TopLevelFlags =
EObjectFlags::RF_Public |
EObjectFlags::RF_Standalone;
SaveArgs.Error = GError;
SaveArgs.bForceByteSwapping = true;
SaveArgs.bWarnOfLongFilename = true;
SaveArgs.SaveFlags = SAVE_NoError;
UPackage::SavePackage(
WorldPackage,
DuplicateWorld,
*PackageFileName,
SaveArgs);
return DuplicateWorld;
}
@ -751,9 +765,21 @@ bool UMapGeneratorWidget::CreateMainLargeMap(const FMapGeneratorMetaInfo& MetaIn
const FString PackageFileName = FPackageName::LongPackageNameToFilename(
PackageName,
FPackageName::GetMapPackageExtension());
UPackage::SavePackage(BaseMapPackage, World, EObjectFlags::RF_Public | EObjectFlags::RF_Standalone,
*PackageFileName, GError, nullptr, true, true, SAVE_NoError);
FSavePackageArgs SaveArgs;
SaveArgs.TopLevelFlags =
EObjectFlags::RF_Public |
EObjectFlags::RF_Standalone;
SaveArgs.Error = GError;
SaveArgs.bForceByteSwapping = true;
SaveArgs.bWarnOfLongFilename = true;
SaveArgs.SaveFlags = SAVE_NoError;
UPackage::SavePackage(
BaseMapPackage,
World,
*PackageFileName,
SaveArgs);
bool bLoadedSuccess = FEditorFileUtils::LoadMap(*PackageName, false, true);
if(!bLoadedSuccess){
@ -776,7 +802,7 @@ bool UMapGeneratorWidget::CreateMainLargeMap(const FMapGeneratorMetaInfo& MetaIn
{
UE_LOG(LogCarlaToolsMapGenerator, Error,
TEXT("%s: Failed to cast Large Map Actor in %s."),
*MetaInfo.MapName);
*CUR_CLASS_FUNC_LINE, *MetaInfo.MapName);
return false;
}
@ -810,8 +836,19 @@ bool UMapGeneratorWidget::CreateMainLargeMap(const FMapGeneratorMetaInfo& MetaIn
}
UPackage::SavePackage(BaseMapPackage, World, EObjectFlags::RF_Public | EObjectFlags::RF_Standalone,
*PackageFileName, GError, nullptr, true, true, SAVE_NoError);
SaveArgs.TopLevelFlags =
EObjectFlags::RF_Public |
EObjectFlags::RF_Standalone;
SaveArgs.Error = GError;
SaveArgs.bForceByteSwapping = true;
SaveArgs.bWarnOfLongFilename = true;
SaveArgs.SaveFlags = SAVE_NoError;
UPackage::SavePackage(
BaseMapPackage,
World,
*PackageFileName,
SaveArgs);
return true;
}
@ -1082,8 +1119,21 @@ bool UMapGeneratorWidget::CreateTilesMaps(const FMapGeneratorMetaInfo& MetaInfo)
const FString PackageFileName = FPackageName::LongPackageNameToFilename(
PackageName,
FPackageName::GetMapPackageExtension());
UPackage::SavePackage(TilePackage, World, EObjectFlags::RF_Public | EObjectFlags::RF_Standalone,
*PackageFileName, GError, nullptr, true, true, SAVE_NoError);
FSavePackageArgs SaveArgs;
SaveArgs.TopLevelFlags =
EObjectFlags::RF_Public |
EObjectFlags::RF_Standalone;
SaveArgs.Error = GError;
SaveArgs.bForceByteSwapping = true;
SaveArgs.bWarnOfLongFilename = true;
SaveArgs.SaveFlags = SAVE_NoError;
UPackage::SavePackage(
TilePackage,
World,
*PackageFileName,
SaveArgs);
// TODO PROV
FText ErrorUnloadingStr;
@ -1200,8 +1250,11 @@ bool UMapGeneratorWidget::CookVegetationToWorld(
FVector(2500, 2500, 900));
UActorFactory* ActorFactory = GEditor->FindActorFactoryForActorClass(AProceduralFoliageVolume::StaticClass());
FActorSpawnParameters SpawnParams;
SpawnParams.Name = InName;
SpawnParams.ObjectFlags = InObjectFlags;
AProceduralFoliageVolume* FoliageVolumeActor = (AProceduralFoliageVolume*) ActorFactory->CreateActor(
AProceduralFoliageVolume::StaticClass(), Level, Transform, InObjectFlags, InName);
AProceduralFoliageVolume::StaticClass(), Level, Transform, SpawnParams);
UProceduralFoliageComponent* FoliageComponent = FoliageVolumeActor->ProceduralComponent;
FoliageComponent->FoliageSpawner = Spawner;

View File

@ -116,7 +116,9 @@ void AProceduralBuildingUtilities::CookProceduralBuildingToMesh(const FString& D
UPackage* NewPackage = CreatePackage(*PackageName);
check(NewPackage);
const IMeshMergeUtilities& MeshUtilities = FModuleManager::Get().LoadModuleChecked<IMeshMergeModule>("MeshMergeUtilities").GetUtilities();
auto& MeshUtilities = FModuleManager::Get().LoadModuleChecked<IMeshMergeModule>(
"MeshMergeUtilities").GetUtilities();
MeshUtilities.MergeComponentsToStaticMesh(
Components,
World,
@ -130,15 +132,19 @@ void AProceduralBuildingUtilities::CookProceduralBuildingToMesh(const FString& D
true);
FSavePackageArgs SaveArgs;
SaveArgs.TopLevelFlags = EObjectFlags::RF_Public |
EObjectFlags::RF_Standalone;
SaveArgs.TopLevelFlags =
EObjectFlags::RF_Public |
EObjectFlags::RF_Standalone;
SaveArgs.Error = GError;
SaveArgs.bForceByteSwapping = true;
SaveArgs.bWarnOfLongFilename = true;
SaveArgs.SaveFlags = SAVE_NoError;
UPackage::SavePackage(NewPackage, AssetsToSync[0],
*FileName, SaveArgs);
UPackage::SavePackage(
NewPackage,
AssetsToSync[0],
*FileName,
SaveArgs);
}

View File

@ -29,6 +29,8 @@
#include "Kismet2/BlueprintEditorUtils.h"
#include "BlueprintEditor.h"
#include "Carla/Vehicle/CarlaWheeledVehicle.h"
#include "PhysicsEngine/SkeletalBodySetup.h"
#include "UObject/SavePackage.h"
void UUSDImporterWidget::ImportUSDProp(
@ -641,9 +643,9 @@ void UUSDImporterWidget::CopyCollisionToPhysicsAsset(
UPhysicsAsset* PhysicsAssetToEdit, UStaticMesh* StaticMesh)
{
UE_LOG(LogCarlaTools, Log, TEXT("Num bodysetups %d"), PhysicsAssetToEdit->SkeletalBodySetups.Num());
UBodySetup* BodySetupPhysicsAsset =
UBodySetup* BodySetupPhysicsAsset = Cast<UBodySetup>(
PhysicsAssetToEdit->SkeletalBodySetups[
PhysicsAssetToEdit->FindBodyIndex(FName("Vehicle_Base"))];
PhysicsAssetToEdit->FindBodyIndex(FName("Vehicle_Base"))]);
UBodySetup* BodySetupStaticMesh = StaticMesh->GetBodySetup();
BodySetupPhysicsAsset->AggGeom = BodySetupStaticMesh->AggGeom;

View File

@ -104,27 +104,27 @@ struct CARLATOOLS_API FMergedVehicleMeshParts
GENERATED_BODY();
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Importer")
UStaticMesh* DoorFR;
TObjectPtr<UStaticMesh> DoorFR = nullptr;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Importer")
UStaticMesh* DoorFL;
TObjectPtr<UStaticMesh> DoorFL = nullptr;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Importer")
UStaticMesh* DoorRR;
TObjectPtr<UStaticMesh> DoorRR = nullptr;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Importer")
UStaticMesh* DoorRL;
TObjectPtr<UStaticMesh> DoorRL = nullptr;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Importer")
UStaticMesh* Trunk;
TObjectPtr<UStaticMesh> Trunk = nullptr;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Importer")
UStaticMesh* Hood;
TObjectPtr<UStaticMesh> Hood = nullptr;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Importer")
UStaticMesh* WheelFR;
TObjectPtr<UStaticMesh> WheelFR = nullptr;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Importer")
UStaticMesh* WheelFL;
TObjectPtr<UStaticMesh> WheelFL = nullptr;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Importer")
UStaticMesh* WheelRR;
TObjectPtr<UStaticMesh> WheelRR = nullptr;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Importer")
UStaticMesh* WheelRL;
TObjectPtr<UStaticMesh> WheelRL = nullptr;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Importer")
UStaticMesh* Body;
TObjectPtr<UStaticMesh> Body = nullptr;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Importer")
FVehicleMeshAnchorPoints Anchors;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="USD Importer")

View File

@ -20,7 +20,6 @@ public class CarlaUnrealTarget : TargetRules
{
DefaultBuildSettings = BuildSettingsVersion.Latest;
IncludeOrderVersion = EngineIncludeOrderVersion.Latest;
Type = TargetType.Game;
ExtraModuleNames.Add("CarlaUnreal");

View File

@ -21,6 +21,8 @@ public class CarlaUnreal : ModuleRules
public CarlaUnreal(ReadOnlyTargetRules Target) : base(Target)
{
PrivatePCHHeaderFile = "CarlaUnreal.h";
bEnableExceptions = true;
bUseRTTI = true;
PublicDependencyModuleNames.AddRange(new string[]
{