diff --git a/Source/Carla/SceneCaptureCamera.cpp b/Source/Carla/SceneCaptureCamera.cpp index 2aa81ad4f..912508840 100644 --- a/Source/Carla/SceneCaptureCamera.cpp +++ b/Source/Carla/SceneCaptureCamera.cpp @@ -26,6 +26,8 @@ static constexpr auto DEPTH_MAT_PATH = static constexpr auto SEMANTIC_SEGMENTATION_MAT_PATH = TEXT("Material'/Carla/PostProcessingMaterials/GTMaterial.GTMaterial'"); +static void RemoveShowFlags(FEngineShowFlags &ShowFlags); + ASceneCaptureCamera::ASceneCaptureCamera(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer), SizeX(720u), @@ -85,24 +87,33 @@ void ASceneCaptureCamera::PostActorCreated() void ASceneCaptureCamera::BeginPlay() { - Super::BeginPlay(); + const bool bRemovePostProcessing = (PostProcessEffect != EPostProcessEffect::SceneFinal); - CaptureRenderTarget->InitCustomFormat(SizeX, SizeY, PF_B8G8R8A8, false); - CaptureRenderTarget->UpdateResource(); + // Setup render target. + const bool bInForceLinearGamma = bRemovePostProcessing; + CaptureRenderTarget->bHDR = !bRemovePostProcessing; + CaptureRenderTarget->InitCustomFormat(SizeX, SizeY, PF_B8G8R8A8, bInForceLinearGamma); CaptureComponent2D->Deactivate(); CaptureComponent2D->TextureTarget = CaptureRenderTarget; - if (PostProcessEffect == EPostProcessEffect::SceneFinal) { - CaptureComponent2D->CaptureSource = ESceneCaptureSource::SCS_FinalColorLDR; - } else if (PostProcessEffect == EPostProcessEffect::Depth) { + + // Setup camera post-processing. + if (PostProcessEffect != EPostProcessEffect::None) { CaptureComponent2D->CaptureSource = ESceneCaptureSource::SCS_FinalColorLDR; + } + if (bRemovePostProcessing) { + RemoveShowFlags(CaptureComponent2D->ShowFlags); + } + if (PostProcessEffect == EPostProcessEffect::Depth) { CaptureComponent2D->PostProcessSettings.AddBlendable(PostProcessDepth, 1.0f); } else if (PostProcessEffect == EPostProcessEffect::SemanticSegmentation) { - CaptureComponent2D->CaptureSource = ESceneCaptureSource::SCS_FinalColorLDR; CaptureComponent2D->PostProcessSettings.AddBlendable(PostProcessSemanticSegmentation, 1.0f); } + CaptureComponent2D->UpdateContent(); CaptureComponent2D->Activate(); + + Super::BeginPlay(); } void ASceneCaptureCamera::SetImageSize(uint32 otherSizeX, uint32 otherSizeY) @@ -155,3 +166,153 @@ void ASceneCaptureCamera::UpdateDrawFrustum() //DrawFrustum->FrustumAspectRatio = CaptureComponent2D->AspectRatio; } } + +// Remove the show flags that might interfere with post-processing effects like +// depth and semantic segmentation. +static void RemoveShowFlags(FEngineShowFlags &ShowFlags) +{ + ShowFlags.SetAmbientOcclusion(false); + ShowFlags.SetAntiAliasing(false); + ShowFlags.SetAtmosphericFog(false); + // ShowFlags.SetAudioRadius(false); + // ShowFlags.SetBillboardSprites(false); + ShowFlags.SetBloom(false); + // ShowFlags.SetBounds(false); + // ShowFlags.SetBrushes(false); + // ShowFlags.SetBSP(false); + // ShowFlags.SetBSPSplit(false); + // ShowFlags.SetBSPTriangles(false); + // ShowFlags.SetBuilderBrush(false); + // ShowFlags.SetCameraAspectRatioBars(false); + // ShowFlags.SetCameraFrustums(false); + ShowFlags.SetCameraImperfections(false); + ShowFlags.SetCameraInterpolation(false); + // ShowFlags.SetCameraSafeFrames(false); + // ShowFlags.SetCollision(false); + // ShowFlags.SetCollisionPawn(false); + // ShowFlags.SetCollisionVisibility(false); + ShowFlags.SetColorGrading(false); + // ShowFlags.SetCompositeEditorPrimitives(false); + // ShowFlags.SetConstraints(false); + // ShowFlags.SetCover(false); + // ShowFlags.SetDebugAI(false); + // ShowFlags.SetDecals(false); + // ShowFlags.SetDeferredLighting(false); + ShowFlags.SetDepthOfField(false); + ShowFlags.SetDiffuse(false); + ShowFlags.SetDirectionalLights(false); + ShowFlags.SetDirectLighting(false); + // ShowFlags.SetDistanceCulledPrimitives(false); + // ShowFlags.SetDistanceFieldAO(false); + // ShowFlags.SetDistanceFieldGI(false); + ShowFlags.SetDynamicShadows(false); + // ShowFlags.SetEditor(false); + ShowFlags.SetEyeAdaptation(false); + ShowFlags.SetFog(false); + // ShowFlags.SetGame(false); + // ShowFlags.SetGameplayDebug(false); + // ShowFlags.SetGBufferHints(false); + ShowFlags.SetGlobalIllumination(false); + ShowFlags.SetGrain(false); + // ShowFlags.SetGrid(false); + // ShowFlags.SetHighResScreenshotMask(false); + // ShowFlags.SetHitProxies(false); + ShowFlags.SetHLODColoration(false); + ShowFlags.SetHMDDistortion(false); + // ShowFlags.SetIndirectLightingCache(false); + // ShowFlags.SetInstancedFoliage(false); + // ShowFlags.SetInstancedGrass(false); + // ShowFlags.SetInstancedStaticMeshes(false); + // ShowFlags.SetLandscape(false); + // ShowFlags.SetLargeVertices(false); + ShowFlags.SetLensFlares(false); + ShowFlags.SetLevelColoration(false); + ShowFlags.SetLightComplexity(false); + ShowFlags.SetLightFunctions(false); + ShowFlags.SetLightInfluences(false); + ShowFlags.SetLighting(false); + ShowFlags.SetLightMapDensity(false); + ShowFlags.SetLightRadius(false); + ShowFlags.SetLightShafts(false); + // ShowFlags.SetLOD(false); + ShowFlags.SetLODColoration(false); + // ShowFlags.SetMaterials(false); + // ShowFlags.SetMaterialTextureScaleAccuracy(false); + // ShowFlags.SetMeshEdges(false); + // ShowFlags.SetMeshUVDensityAccuracy(false); + // ShowFlags.SetModeWidgets(false); + ShowFlags.SetMotionBlur(false); + // ShowFlags.SetNavigation(false); + ShowFlags.SetOnScreenDebug(false); + // ShowFlags.SetOutputMaterialTextureScales(false); + // ShowFlags.SetOverrideDiffuseAndSpecular(false); + // ShowFlags.SetPaper2DSprites(false); + ShowFlags.SetParticles(false); + // ShowFlags.SetPivot(false); + ShowFlags.SetPointLights(false); + // ShowFlags.SetPostProcessing(false); + // ShowFlags.SetPostProcessMaterial(false); + // ShowFlags.SetPrecomputedVisibility(false); + // ShowFlags.SetPrecomputedVisibilityCells(false); + // ShowFlags.SetPreviewShadowsIndicator(false); + // ShowFlags.SetPrimitiveDistanceAccuracy(false); + ShowFlags.SetPropertyColoration(false); + // ShowFlags.SetQuadOverdraw(false); + // ShowFlags.SetReflectionEnvironment(false); + // ShowFlags.SetReflectionOverride(false); + ShowFlags.SetRefraction(false); + // ShowFlags.SetRendering(false); + ShowFlags.SetSceneColorFringe(false); + // ShowFlags.SetScreenPercentage(false); + ShowFlags.SetScreenSpaceAO(false); + ShowFlags.SetScreenSpaceReflections(false); + // ShowFlags.SetSelection(false); + // ShowFlags.SetSelectionOutline(false); + // ShowFlags.SetSeparateTranslucency(false); + // ShowFlags.SetShaderComplexity(false); + // ShowFlags.SetShaderComplexityWithQuadOverdraw(false); + // ShowFlags.SetShadowFrustums(false); + // ShowFlags.SetSkeletalMeshes(false); + // ShowFlags.SetSkinCache(false); + ShowFlags.SetSkyLighting(false); + // ShowFlags.SetSnap(false); + // ShowFlags.SetSpecular(false); + // ShowFlags.SetSplines(false); + ShowFlags.SetSpotLights(false); + // ShowFlags.SetStaticMeshes(false); + ShowFlags.SetStationaryLightOverlap(false); + // ShowFlags.SetStereoRendering(false); + // ShowFlags.SetStreamingBounds(false); + ShowFlags.SetSubsurfaceScattering(false); + // ShowFlags.SetTemporalAA(false); + // ShowFlags.SetTessellation(false); + // ShowFlags.SetTestImage(false); + // ShowFlags.SetTextRender(false); + // ShowFlags.SetTexturedLightProfiles(false); + ShowFlags.SetTonemapper(false); + // ShowFlags.SetTranslucency(false); + // ShowFlags.SetVectorFields(false); + // ShowFlags.SetVertexColors(false); + // ShowFlags.SetVignette(false); + // ShowFlags.SetVisLog(false); + ShowFlags.SetVisualizeAdaptiveDOF(false); + ShowFlags.SetVisualizeBloom(false); + ShowFlags.SetVisualizeBuffer(false); + ShowFlags.SetVisualizeDistanceFieldAO(false); + ShowFlags.SetVisualizeDistanceFieldGI(false); + ShowFlags.SetVisualizeDOF(false); + ShowFlags.SetVisualizeHDR(false); + ShowFlags.SetVisualizeLightCulling(false); + ShowFlags.SetVisualizeLPV(false); + ShowFlags.SetVisualizeMeshDistanceFields(false); + ShowFlags.SetVisualizeMotionBlur(false); + ShowFlags.SetVisualizeOutOfBoundsPixels(false); + ShowFlags.SetVisualizeSenses(false); + ShowFlags.SetVisualizeShadingModels(false); + ShowFlags.SetVisualizeSSR(false); + ShowFlags.SetVisualizeSSS(false); + // ShowFlags.SetVolumeLightingSamples(false); + // ShowFlags.SetVolumes(false); + // ShowFlags.SetWidgetComponents(false); + // ShowFlags.SetWireframe(false); +} diff --git a/Source/Carla/Tagger.cpp b/Source/Carla/Tagger.cpp index c84373b50..8664adcae 100644 --- a/Source/Carla/Tagger.cpp +++ b/Source/Carla/Tagger.cpp @@ -11,18 +11,18 @@ enum class Label : uint8 { - None = 0, - Buildings, - Fences, - Other, - Pedestrians, - Poles, - RoadLines, - Roads, - Sidewalks, - Vegetation, - Vehicles, - Walls, + None = 0u, + Buildings = 1u, + Fences = 2u, + Other = 3u, + Pedestrians = 4u, + Poles = 5u, + RoadLines = 6u, + Roads = 7u, + Sidewalks = 8u, + Vegetation = 9u, + Vehicles = 10u, + Walls = 11u, }; static Label GetLabel(const FString &str) {