Skip to content

Commit

Permalink
Use full size mesh terrain (#537)
Browse files Browse the repository at this point in the history
use full size mesh terrain
  • Loading branch information
QuanyiLi committed Oct 29, 2023
1 parent 2ac7bcb commit 37bfbbf
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 16 deletions.
17 changes: 10 additions & 7 deletions metadrive/engine/core/terrain.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ def __init__(self, show_terrain, engine):
CamMask.MiniMap | CamMask.Shadow | CamMask.DepthCam | CamMask.ScreenshotCam | CamMask.SemanticCam
)
# use plane terrain or mesh terrain, True by default.
self.plane_terrain = engine.global_config["plane_terrain"]
self.use_mesh_terrain = engine.global_config["use_mesh_terrain"]
self.full_size_mesh = engine.global_config["full_size_mesh"]

# collision mesh
self.plane_collision_terrain = None # a flat collision shape
Expand Down Expand Up @@ -71,7 +72,7 @@ def __init__(self, show_terrain, engine):
# self.probe.set_pos(0, 0, self.PROBE_HEIGHT)
# self.probe.set_scale(self.PROBE_SIZE * 2, self.PROBE_SIZE * 2, 1000)

if not self.plane_terrain or self.render:
if self.use_mesh_terrain or self.render:
self._load_height_field_image(engine)

# @time_me
Expand All @@ -83,11 +84,11 @@ def reset(self, center_position):
assert self.engine is not None, "Can not call this without initializing engine"
self.detach_from_world(self.engine.physics_world)

if self.plane_terrain and self.plane_collision_terrain is None:
if not self.use_mesh_terrain and self.plane_collision_terrain is None:
# only generate once if plane terrain
self.generate_plane_collision_terrain()

if self.render or not self.plane_terrain:
if self.render or self.use_mesh_terrain:
# modify default height image
drivable_region = self.engine.current_map.get_height_map(
self._heightmap_size, 1, self._drivable_area_extension
Expand All @@ -109,8 +110,10 @@ def reset(self, center_position):
...] = np.where(drivable_region, self._terrain_offset, heightfield_to_modify)

# generate collision mesh
if not self.plane_terrain:
self._generate_collision_mesh(heightfield_to_modify, self._height_scale)
if self.use_mesh_terrain:
self._generate_collision_mesh(
heightfield_base if self.full_size_mesh else heightfield_to_modify, self._height_scale
)

if self.render:
# Make semantics for shader terrain
Expand Down Expand Up @@ -304,7 +307,7 @@ def set_position(self, position, height=None):
self._mesh_terrain.set_pos(*pos, 0)
if self.probe is not None:
self.probe.set_pos(*pos, self.PROBE_HEIGHT)
if not self.plane_terrain:
if self.use_mesh_terrain:
self.mesh_collision_terrain.set_pos(*position[:2], self._height_scale)

def _generate_card_terrain(self):
Expand Down
4 changes: 3 additions & 1 deletion metadrive/envs/base_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,9 @@
# height scale for mountains, unit: [m]
height_scale=50,
# use plane collision or mesh collision
plane_terrain=True,
use_mesh_terrain=False,
# use full-size mesh terrain
full_size_mesh=True,

# ===== Others =====
# Force to generate objects in the left lane.
Expand Down
2 changes: 1 addition & 1 deletion metadrive/tests/test_policy/test_expert_performance.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def test_expert_with_traffic(plane, use_render=False):
dict(
num_scenarios=1,
map="CCC",
plane_terrain=plane,
use_mesh_terrain=plane,
start_seed=2,
random_traffic=False,
# debug_static_world=True,
Expand Down
12 changes: 6 additions & 6 deletions metadrive/tests/test_policy/test_idm_policy.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ def _create_vehicle():
return v


@pytest.mark.parametrize("plane_terrain", [True, False], ids=["plane", "mesh"])
def test_idm_policy_briefly(plane_terrain):
env = MetaDriveEnv({"plane_terrain": plane_terrain})
@pytest.mark.parametrize("use_mesh_terrain", [True, False], ids=["plane", "mesh"])
def test_idm_policy_briefly(use_mesh_terrain):
env = MetaDriveEnv({"use_mesh_terrain": use_mesh_terrain})
env.reset()
try:
vehicles = env.engine.traffic_manager.traffic_vehicles
Expand All @@ -54,10 +54,10 @@ def test_idm_policy_briefly(plane_terrain):
env.close()


@pytest.mark.parametrize("plane_terrain", [True, False], ids=["plane", "mesh"])
def test_idm_policy_is_moving(plane_terrain, render=False, in_test=True):
@pytest.mark.parametrize("use_mesh_terrain", [True, False], ids=["plane", "mesh"])
def test_idm_policy_is_moving(use_mesh_terrain, render=False, in_test=True):
# config = {"traffic_mode": "hybrid", "map": "SS", "traffic_density": 1.0}
config = {"plane_terrain": plane_terrain, "traffic_mode": "respawn", "map": "SS", "traffic_density": 1.0}
config = {"use_mesh_terrain": use_mesh_terrain, "traffic_mode": "respawn", "map": "SS", "traffic_density": 1.0}
if render:
config.update({"use_render": True, "manual_control": True})
env = MetaDriveEnv(config)
Expand Down
2 changes: 1 addition & 1 deletion metadrive/tests/vis_env/vis_metadrive_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
# "random_agent_model": False,
"manual_control": True,
"use_render": True,
"plane_terrain": False,
"use_mesh_terrain": False,
"accident_prob": 1,
"decision_repeat": 5,
"daytime": "19:00",
Expand Down

0 comments on commit 37bfbbf

Please sign in to comment.