Skip to content

Commit

Permalink
Fixes #2815: Non-linear bias corrupts SurfaceNormals when requested t…
Browse files Browse the repository at this point in the history
…hrough AirSim (#2845)

* Mark post process material for normals as unlit for some speed up

* Fixes (#2815): SurfaceNormals and Segmentation getting non-linear bias

* Replacing magic numbers with enum values
  • Loading branch information
LSBOSS authored Jul 24, 2020
1 parent 0dcfa92 commit d9289cf
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 10 deletions.
Binary file modified Unreal/Plugins/AirSim/Content/HUDAssets/NormalsMaterial.uasset
Binary file not shown.
32 changes: 24 additions & 8 deletions Unreal/Plugins/AirSim/Source/PIPCamera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -290,12 +290,27 @@ void APIPCamera::setupCameraFromSettings(const APIPCamera::CameraSetting& camera
const auto& noise_setting = camera_setting.noise_settings.at(image_type);

if (image_type >= 0) { //scene capture components
if (image_type==0 || image_type==5 || image_type==6 || image_type==7)
updateCaptureComponentSetting(captures_[image_type], render_targets_[image_type], false,
image_type_to_pixel_format_map_[image_type], capture_setting, ned_transform);
else
updateCaptureComponentSetting(captures_[image_type], render_targets_[image_type], true,
image_type_to_pixel_format_map_[image_type], capture_setting, ned_transform);
switch (Utils::toEnum<ImageType>(image_type)) {
case ImageType::Scene:
case ImageType::Infrared:
updateCaptureComponentSetting(captures_[image_type], render_targets_[image_type],
false, image_type_to_pixel_format_map_[image_type], capture_setting, ned_transform,
false);
break;

case ImageType::Segmentation:
case ImageType::SurfaceNormals:
updateCaptureComponentSetting(captures_[image_type], render_targets_[image_type],
true, image_type_to_pixel_format_map_[image_type], capture_setting, ned_transform,
true);
break;

default:
updateCaptureComponentSetting(captures_[image_type], render_targets_[image_type],
true, image_type_to_pixel_format_map_[image_type], capture_setting, ned_transform,
false);
break;
}

setNoiseMaterial(image_type, captures_[image_type], captures_[image_type]->PostProcessSettings, noise_setting);
}
Expand All @@ -308,15 +323,16 @@ void APIPCamera::setupCameraFromSettings(const APIPCamera::CameraSetting& camera
}

void APIPCamera::updateCaptureComponentSetting(USceneCaptureComponent2D* capture, UTextureRenderTarget2D* render_target,
bool auto_format, const EPixelFormat& pixel_format, const CaptureSetting& setting, const NedTransform& ned_transform)
bool auto_format, const EPixelFormat& pixel_format, const CaptureSetting& setting, const NedTransform& ned_transform,
bool force_linear_gamma)
{
if (auto_format)
{
render_target->InitAutoFormat(setting.width, setting.height); //256 X 144, X 480
}
else
{
render_target->InitCustomFormat(setting.width, setting.height, pixel_format, false);
render_target->InitCustomFormat(setting.width, setting.height, pixel_format, force_linear_gamma);
}

if (!std::isnan(setting.target_gamma))
Expand Down
5 changes: 3 additions & 2 deletions Unreal/Plugins/AirSim/Source/PIPCamera.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,9 @@ class AIRSIM_API APIPCamera : public ACameraActor

static unsigned int imageTypeCount();
void enableCaptureComponent(const ImageType type, bool is_enabled);
static void updateCaptureComponentSetting(USceneCaptureComponent2D* capture, UTextureRenderTarget2D* render_target,
bool auto_format, const EPixelFormat& pixel_format, const CaptureSetting& setting, const NedTransform& ned_transform);
static void updateCaptureComponentSetting(USceneCaptureComponent2D* capture, UTextureRenderTarget2D* render_target,
bool auto_format, const EPixelFormat& pixel_format, const CaptureSetting& setting, const NedTransform& ned_transform,
bool force_linear_gamma);
void setNoiseMaterial(int image_type, UObject* outer, FPostProcessSettings& obj, const NoiseSetting& settings);
static void updateCameraPostProcessingSetting(FPostProcessSettings& obj, const CaptureSetting& setting);
static void updateCameraSetting(UCameraComponent* camera, const CaptureSetting& setting, const NedTransform& ned_transform);
Expand Down

0 comments on commit d9289cf

Please sign in to comment.