|
42 | 42 | SIMPLE_SHADING_MODE_SETTING = "/rtx/sdg/simpleShading/mode" |
43 | 43 |
|
44 | 44 |
|
| 45 | +def _camera_semantic_filter_predicate(semantic_filter: str | list[str]) -> str: |
| 46 | + """Build the instance-mapping semantics predicate from :attr:`isaaclab.sensors.camera.CameraCfg.semantic_filter`. |
| 47 | +
|
| 48 | + Replicator's semantic/instance segmentation annotators consume this via the synthetic-data pipeline. |
| 49 | + """ |
| 50 | + if isinstance(semantic_filter, list): |
| 51 | + return ":*; ".join(semantic_filter) + ":*" |
| 52 | + return semantic_filter |
| 53 | + |
| 54 | + |
45 | 55 | @dataclass |
46 | 56 | class IsaacRtxRenderData: |
47 | 57 | """Render data for Isaac RTX renderer.""" |
@@ -71,6 +81,7 @@ def create_render_data(self, sensor: SensorBase) -> IsaacRtxRenderData: |
71 | 81 | """Create render product and annotators for the tiled camera. |
72 | 82 | See :meth:`~isaaclab.renderers.base_renderer.BaseRenderer.create_render_data`.""" |
73 | 83 | import omni.replicator.core as rep |
| 84 | + from omni.syntheticdata import SyntheticData |
74 | 85 | from pxr import UsdGeom |
75 | 86 |
|
76 | 87 | settings = get_settings_manager() |
@@ -108,6 +119,11 @@ def create_render_data(self, sensor: SensorBase) -> IsaacRtxRenderData: |
108 | 119 | ) |
109 | 120 | render_product_paths = [rp.path] |
110 | 121 |
|
| 122 | + # Synthetic-data instance mapping filter for segmentation; before annotator attach. |
| 123 | + SyntheticData.Get().set_instance_mapping_semantic_filter( |
| 124 | + _camera_semantic_filter_predicate(sensor.cfg.semantic_filter) |
| 125 | + ) |
| 126 | + |
111 | 127 | # Register simple shading if needed |
112 | 128 | if any(data_type in SIMPLE_SHADING_MODES for data_type in sensor.cfg.data_types): |
113 | 129 | rep.AnnotatorRegistry.register_annotator_from_aov( |
|
0 commit comments