Extended PythonAPI for weather

This commit is contained in:
Roel Algaba Brizuela 2021-06-02 17:02:31 +02:00 committed by Axel1092
parent 8e111ab208
commit 829664d8a3
6 changed files with 98 additions and 27 deletions

View File

@ -11,22 +11,22 @@ namespace rpc {
using WP = WeatherParameters;
// cloudiness precip. prec.dep. wind azimuth altitude fog dens fog dist fog fall wetness
WP WP::Default = { -1.0f, -1.0f, -1.0f, -1.00f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f};
WP WP::ClearNoon = { 15.0f, 0.0f, 0.0f, 0.35f, 0.0f, 75.0f, 0.0f, 0.0f, 0.0f, 0.0f};
WP WP::CloudyNoon = { 80.0f, 0.0f, 0.0f, 0.35f, 0.0f, 75.0f, 0.0f, 0.0f, 0.0f, 0.0f};
WP WP::WetNoon = { 20.0f, 0.0f, 50.0f, 0.35f, 0.0f, 75.0f, 0.0f, 0.0f, 0.0f, 0.0f};
WP WP::WetCloudyNoon = { 80.0f, 0.0f, 50.0f, 0.35f, 0.0f, 75.0f, 0.0f, 0.0f, 0.0f, 0.0f};
WP WP::MidRainyNoon = { 80.0f, 30.0f, 50.0f, 0.40f, 0.0f, 75.0f, 0.0f, 0.0f, 0.0f, 0.0f};
WP WP::HardRainNoon = { 90.0f, 60.0f, 100.0f, 1.00f, 0.0f, 75.0f, 0.0f, 0.0f, 0.0f, 0.0f};
WP WP::SoftRainNoon = { 70.0f, 15.0f, 50.0f, 0.35f, 0.0f, 75.0f, 0.0f, 0.0f, 0.0f, 0.0f};
WP WP::ClearSunset = { 15.0f, 0.0f, 0.0f, 0.35f, 0.0f, 15.0f, 0.0f, 0.0f, 0.0f, 0.0f};
WP WP::CloudySunset = { 80.0f, 0.0f, 0.0f, 0.35f, 0.0f, 15.0f, 0.0f, 0.0f, 0.0f, 0.0f};
WP WP::WetSunset = { 20.0f, 0.0f, 50.0f, 0.35f, 0.0f, 15.0f, 0.0f, 0.0f, 0.0f, 0.0f};
WP WP::WetCloudySunset = { 90.0f, 0.0f, 50.0f, 0.35f, 0.0f, 15.0f, 0.0f, 0.0f, 0.0f, 0.0f};
WP WP::MidRainSunset = { 80.0f, 30.0f, 50.0f, 0.40f, 0.0f, 15.0f, 0.0f, 0.0f, 0.0f, 0.0f};
WP WP::HardRainSunset = { 80.0f, 60.0f, 100.0f, 1.00f, 0.0f, 15.0f, 0.0f, 0.0f, 0.0f, 0.0f};
WP WP::SoftRainSunset = { 90.0f, 15.0f, 50.0f, 0.35f, 0.0f, 15.0f, 0.0f, 0.0f, 0.0f, 0.0f};
// cloudiness precip. prec.dep. wind azimuth altitude fog dens fog dist fog fall wetness scat.i mie.scat.s rayleigh.scat.scale
WP WP::Default = { -1.0f, -1.0f, -1.0f, -1.00f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, 0.0331f};
WP WP::ClearNoon = { 15.0f, 0.0f, 0.0f, 0.35f, 0.0f, 75.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0331f};
WP WP::CloudyNoon = { 80.0f, 0.0f, 0.0f, 0.35f, 0.0f, 75.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0331f};
WP WP::WetNoon = { 20.0f, 0.0f, 50.0f, 0.35f, 0.0f, 75.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0331f};
WP WP::WetCloudyNoon = { 80.0f, 0.0f, 50.0f, 0.35f, 0.0f, 75.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0331f};
WP WP::MidRainyNoon = { 80.0f, 30.0f, 50.0f, 0.40f, 0.0f, 75.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0331f};
WP WP::HardRainNoon = { 90.0f, 60.0f, 100.0f, 1.00f, 0.0f, 75.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0331f};
WP WP::SoftRainNoon = { 70.0f, 15.0f, 50.0f, 0.35f, 0.0f, 75.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0331f};
WP WP::ClearSunset = { 15.0f, 0.0f, 0.0f, 0.35f, 0.0f, 15.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0331f};
WP WP::CloudySunset = { 80.0f, 0.0f, 0.0f, 0.35f, 0.0f, 15.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0331f};
WP WP::WetSunset = { 20.0f, 0.0f, 50.0f, 0.35f, 0.0f, 15.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0331f};
WP WP::WetCloudySunset = { 90.0f, 0.0f, 50.0f, 0.35f, 0.0f, 15.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0331f};
WP WP::MidRainSunset = { 80.0f, 30.0f, 50.0f, 0.40f, 0.0f, 15.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0331f};
WP WP::HardRainSunset = { 80.0f, 60.0f, 100.0f, 1.00f, 0.0f, 15.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0331f};
WP WP::SoftRainSunset = { 90.0f, 15.0f, 50.0f, 0.35f, 0.0f, 15.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0331f};
} // namespace rpc
} // namespace carla

View File

@ -51,7 +51,10 @@ namespace rpc {
float in_fog_density,
float in_fog_distance,
float in_fog_falloff,
float in_wetness)
float in_wetness,
float in_scattering_intensity,
float in_mie_scattering_scale,
float in_rayleigh_scattering_scale)
: cloudiness(in_cloudiness),
precipitation(in_precipitation),
precipitation_deposits(in_precipitation_deposits),
@ -61,7 +64,10 @@ namespace rpc {
fog_density(in_fog_density),
fog_distance(in_fog_distance),
fog_falloff(in_fog_falloff),
wetness(in_wetness) {}
wetness(in_wetness),
scattering_intensity(in_scattering_intensity),
mie_scattering_scale(in_mie_scattering_scale),
rayleigh_scattering_scale(in_rayleigh_scattering_scale) {}
float cloudiness = 0.0f;
float precipitation = 0.0f;
@ -73,6 +79,9 @@ namespace rpc {
float fog_distance = 0.0f;
float fog_falloff = 0.0f;
float wetness = 0.0f;
float scattering_intensity = 0.0f;
float mie_scattering_scale = 0.0f;
float rayleigh_scattering_scale = 0.0331f;
#ifdef LIBCARLA_INCLUDED_FROM_UE4
@ -86,7 +95,10 @@ namespace rpc {
fog_density(Weather.FogDensity),
fog_distance(Weather.FogDistance),
fog_falloff(Weather.FogFalloff),
wetness(Weather.Wetness) {}
wetness(Weather.Wetness),
scattering_intensity(Weather.ScatteringIntensity),
mie_scattering_scale(Weather.MieScatteringScale),
rayleigh_scattering_scale(Weather.RayleighScatteringScale) {}
operator FWeatherParameters() const {
FWeatherParameters Weather;
@ -100,6 +112,10 @@ namespace rpc {
Weather.FogDistance = fog_distance;
Weather.FogFalloff = fog_falloff;
Weather.Wetness = wetness;
Weather.ScatteringIntensity = scattering_intensity;
Weather.MieScatteringScale = mie_scattering_scale;
Weather.RayleighScatteringScale = rayleigh_scattering_scale;
return Weather;
}
@ -116,7 +132,10 @@ namespace rpc {
fog_density != rhs.fog_density ||
fog_distance != rhs.fog_distance ||
fog_falloff != rhs.fog_falloff ||
wetness != rhs.wetness;
wetness != rhs.wetness ||
scattering_intensity != rhs.scattering_intensity ||
mie_scattering_scale != rhs.mie_scattering_scale ||
rayleigh_scattering_scale != rhs.rayleigh_scattering_scale;
}
bool operator==(const WeatherParameters &rhs) const {
@ -133,7 +152,10 @@ namespace rpc {
fog_density,
fog_distance,
fog_falloff,
wetness);
wetness,
scattering_intensity,
mie_scattering_scale,
rayleigh_scattering_scale);
};
} // namespace rpc

View File

@ -22,7 +22,10 @@ namespace rpc {
<< ", fog_density=" << std::to_string(weather.fog_density)
<< ", fog_distance=" << std::to_string(weather.fog_distance)
<< ", fog_falloff=" << std::to_string(weather.fog_falloff)
<< ", wetness=" << std::to_string(weather.wetness) << ')';
<< ", wetness=" << std::to_string(weather.wetness)
<< ", scattering_intensity=" << std::to_string(weather.scattering_intensity)
<< ", mie_scattering_scale=" << std::to_string(weather.mie_scattering_scale)
<< ", rayleigh_scattering_scale=" << std::to_string(weather.rayleigh_scattering_scale) << ')';
return out;
}
@ -34,7 +37,7 @@ void export_weather() {
namespace cr = carla::rpc;
auto cls = class_<cr::WeatherParameters>("WeatherParameters")
.def(init<float, float, float, float, float, float, float, float, float, float>(
.def(init<float, float, float, float, float, float, float, float, float, float, float, float, float>(
(arg("cloudiness")=0.0f,
arg("precipitation")=0.0f,
arg("precipitation_deposits")=0.0f,
@ -44,7 +47,10 @@ void export_weather() {
arg("fog_density")=0.0f,
arg("fog_distance")=0.0f,
arg("fog_falloff")=0.0f,
arg("wetness")=0.0f)))
arg("wetness")=0.0f,
arg("scattering_intensity")=0.0f,
arg("mie_scattering_scale")=0.0f,
arg("rayleigh_scattering_scale")=0.0331f)))
.def_readwrite("cloudiness", &cr::WeatherParameters::cloudiness)
.def_readwrite("precipitation", &cr::WeatherParameters::precipitation)
.def_readwrite("precipitation_deposits", &cr::WeatherParameters::precipitation_deposits)
@ -55,6 +61,9 @@ void export_weather() {
.def_readwrite("fog_distance", &cr::WeatherParameters::fog_distance)
.def_readwrite("fog_falloff", &cr::WeatherParameters::fog_falloff)
.def_readwrite("wetness", &cr::WeatherParameters::wetness)
.def_readwrite("scattering_intensity", &cr::WeatherParameters::scattering_intensity)
.def_readwrite("mie_scattering_scale", &cr::WeatherParameters::mie_scattering_scale)
.def_readwrite("rayleigh_scattering_scale", &cr::WeatherParameters::rayleigh_scattering_scale)
.def("__eq__", &cr::WeatherParameters::operator==)
.def("__ne__", &cr::WeatherParameters::operator!=)
.def(self_ns::str(self_ns::self))

View File

@ -25,9 +25,9 @@ SUN_PRESETS = {
'sunset': (0.5, 180.0)}
WEATHER_PRESETS = {
'clear': [10.0, 0.0, 0.0, 5.0, 0.0, 0.0, 0.2, 0.0],
'overcast': [80.0, 0.0, 0.0, 50.0, 2.0, 0.0, 0.9, 10.0],
'rain': [100.0, 80.0, 90.0, 100.0, 20.0, 0.0, 0.9, 100.0]}
'clear': [10.0, 0.0, 0.0, 5.0, 0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 0.0331],
'overcast': [80.0, 0.0, 0.0, 50.0, 2.0, 0.0, 0.9, 10.0, 0.0, 0.0, 0.0331],
'rain': [100.0, 80.0, 90.0, 100.0, 20.0, 0.0, 0.9, 100.0, 0.0, 0.0, 0.0331]}
CAR_LIGHTS = {
'None' : [carla.VehicleLightState.NONE],
@ -74,6 +74,9 @@ def apply_weather_presets(args, weather):
weather.fog_distance = WEATHER_PRESETS[args.weather][5]
weather.fog_falloff = WEATHER_PRESETS[args.weather][6]
weather.wetness = WEATHER_PRESETS[args.weather][7]
weather.scattering_intensity = WEATHER_PRESETS[args.weather][8]
weather.mie_scattering_scale = WEATHER_PRESETS[args.weather][9]
weather.rayleigh_scattering_scale = WEATHER_PRESETS[args.weather][10]
else:
print("[ERROR]: Command [--weather | -w] '" + args.weather + "' not known")
sys.exit(1)
@ -101,6 +104,13 @@ def apply_weather_values(args, weather):
weather.fog_falloff = args.fogfalloff
if args.wetness is not None:
weather.wetness = args.wetness
if args.scatteringintensity is not None:
weather.scattering_intensity = args.scatteringintensity
if args.miescatteringscale is not None:
weather.mie_scattering_scale = args.miescatteringscale
if args.rayleighscatteringscale is not None:
print(weather.rayleigh_scattering_scale)
weather.rayleigh_scattering_scale = args.rayleighscatteringscale
def apply_lights_to_cars(args, world):
@ -234,6 +244,24 @@ def main():
default=None,
type=float,
help='Wetness intensity [0.0, 100.0]')
argparser.add_argument(
'--scatteringintensity',
metavar='Si',
default=None,
type=float,
help='Scattering intensity [0.0, inf]')
argparser.add_argument(
'--rayleighscatteringscale',
metavar='rss',
default=None,
type=float,
help='Rayleigh scattering scale [0.0, 2.0]')
argparser.add_argument(
'--miescatteringscale',
metavar='mss',
default=None,
type=float,
help='Mie scattering scale [0.0, 5.0]')
argparser.add_argument(
'--cars',
metavar='Cars',

View File

@ -30,6 +30,9 @@ void AWeather::ApplyWeather(const FWeatherParameters &InWeather)
UE_LOG(LogCarla, Log, TEXT(" - FogDistance = %.2f"), Weather.FogDistance);
UE_LOG(LogCarla, Log, TEXT(" - FogFalloff = %.2f"), Weather.FogFalloff);
UE_LOG(LogCarla, Log, TEXT(" - Wetness = %.2f"), Weather.Wetness);
UE_LOG(LogCarla, Log, TEXT(" - ScatteringIntensity = %.2f"), Weather.ScatteringIntensity);
UE_LOG(LogCarla, Log, TEXT(" - MieScatteringScale = %.2f"), Weather.MieScatteringScale);
UE_LOG(LogCarla, Log, TEXT(" - RayleighScatteringScale = %.2f"), Weather.RayleighScatteringScale);
#endif // CARLA_WEATHER_EXTRA_LOG
// Call the blueprint that actually changes the weather.

View File

@ -42,4 +42,13 @@ struct CARLA_API FWeatherParameters
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(ClampMin = "0.0", ClampMax = "100.0", UIMin = "0.0", UIMax = "100.0"))
float Wetness = 0.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(ClampMin = "0.0", ClampMax = "100.0", UIMin = "0.0", UIMax = "100.0"))
float ScatteringIntensity = 0.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(ClampMin = "0.0", ClampMax = "5.0", UIMin = "0.0", UIMax = "5.0"))
float MieScatteringScale = 0.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(ClampMin = "0.0", ClampMax = "2.0", UIMin = "0.0", UIMax = "2.0"))
float RayleighScatteringScale = 0.0331f;
};