Scenes (.scenes)

Contents

Scenes (.scenes)#

Rooms (.scenes.room)#

room#

class infinigen2.scenes.room.room.LivingroomResult(...)[source]#

Bases: NamedTuple

all_objects: list#
lights: list#
colliders: CollisionSet#
floor: pf.MeshObject#
dimensions: pf.Vector | None#
infinigen2.scenes.room.room.livingroom_rand(...) LivingroomResult[source]#

Example renders

infinigen2.scenes.room.room.livingroom_rand seed 0
infinigen2 livingroom_rand render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.livingroom_rand seed 1
infinigen2 livingroom_rand render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.livingroom_rand seed 2
infinigen2 livingroom_rand render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.livingroom_rand seed 3
infinigen2 livingroom_rand render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.livingroom_rand seed 4
infinigen2 livingroom_rand render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.livingroom_rand seed 5
infinigen2 livingroom_rand render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • dimensions (pf.Vector | None) -- (default: None)

  • frame_start (int) -- (default: 1)

  • frame_end (int) -- (default: 1)

room_furniture#

class infinigen2.scenes.room.room_furniture.ArrangementResult(...)[source]#

Bases: NamedTuple

sofas: list[MeshResult]#
dining_tables: list[MeshResult]#
rugs: list[pf.MeshObject]#
center_coffee_tables: list[MeshResult]#
class infinigen2.scenes.room.room_furniture.MeshResult(*args, **kwargs)[source]#

Bases: Protocol

property mesh: pf.MeshObject#
class infinigen2.scenes.room.room_furniture.RoomFurnitureResult(...)[source]#

Bases: NamedTuple

furniture: list[pf.MeshObject]#
storage_surfaces: list[pf.MeshObject]#
lights: list[LightObject]#
colliders: CollisionSet#
floor: pf.MeshObject#
storage_objects: list[pf.MeshObject]#
coffee_tables: list[pf.MeshObject]#
side_tables: list[pf.MeshObject]#
diningtable_objs: list[pf.MeshObject]#
sofas: list[pf.MeshObject]#
rugs: list[pf.MeshObject]#
infinigen2.scenes.room.room_furniture.back_face_grounded(...) bool[source]#

True iff every corner of obj’s back (-X local) face has a collider directly behind it within (1 + eps) * margin. Rejects placements where part of the back overhangs a window/door alcove (no wall behind that corner).

Parameters:
infinigen2.scenes.room.room_furniture.centered_sofa_setup_rand(
...,
) tuple[ArrangementResult, CollisionSet][source]#
Parameters:
infinigen2.scenes.room.room_furniture.keep_unobstructed(
results,
center,
colliders,
) list[infinigen2.scenes.room.room_furniture.MR][source]#

Drop results whose center a collider separates from center (e.g. a wall between the rug and the sofa). Returns the unobstructed results; reads colliders but does not update them.

Parameters:
infinigen2.scenes.room.room_furniture.place_dining_table(
...,
) tuple[list[MeshResult], CollisionSet][source]#

Place a single dining table: 2/3 in clear floor space, 1/3 snapped to a wall. Returns the placed result (length 0 or 1) and updated colliders.

Parameters:
infinigen2.scenes.room.room_furniture.random_bbox_poses_animation_rand(...)[source]#
Parameters:
infinigen2.scenes.room.room_furniture.retry_place(...) infinigen2.scenes.room.room_furniture.MR | None[source]#

Re-pose child with place_fn until it clears the existing colliders (and satisfies accept_fn, if given), or give up and return None. Reads colliders but never extends it; keep_non_colliding owns updates and intra-batch collisions.

Parameters:
infinigen2.scenes.room.room_furniture.room_furniture_rand(...) RoomFurnitureResult[source]#
Parameters:
infinigen2.scenes.room.room_furniture.side_table_object_rand(rng) MeshResult[source]#
Parameters:

rng (Generator)

infinigen2.scenes.room.room_furniture.storage_object_rand(rng) MeshResult[source]#
Parameters:

rng (Generator)

infinigen2.scenes.room.room_furniture.table_decoration_object_rand(rng) MeshResult[source]#
Parameters:

rng (Generator)

room_shape#

class infinigen2.scenes.room.room_shape.RoomEdgeToWallsResult(geometry, vector, is_face_flat)[source]#

Bases: NamedTuple

geometry: pf.ProcNode[pf.MeshObject]#
vector: pf.ProcNode[pf.Vector]#
is_face_flat: pf.ProcNode[bool]#
class infinigen2.scenes.room.room_shape.RoomShapeResult(...)[source]#

Bases: NamedTuple

walls: pf.MeshObject#
flat_walls: list[pf.MeshObject]#
floor: pf.MeshObject#
ceiling: pf.MeshObject#
dimensions: pf.Vector#
edge_curve: RoomEdgeCurveResult#
property all_objects: list[pf.MeshObject]#
infinigen2.scenes.room.room_shape.room_dimensions_rand(rng) pf.Vector[source]#
Parameters:

rng (Generator)

infinigen2.scenes.room.room_shape.room_edge_to_walls(
curve,
height,
is_edge_point_flat,
) RoomEdgeToWallsResult[source]#
Parameters:
infinigen2.scenes.room.room_shape.room_shape_rand(
rng,
dimensions=None,
floor_ceiling_offset_epsilon=0.005,
) RoomShapeResult[source]#

Example renders

infinigen2.scenes.room.room_shape.room_shape_rand seed 0
infinigen2 room_shape_rand render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room_shape.room_shape_rand seed 1
infinigen2 room_shape_rand render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room_shape.room_shape_rand seed 2
infinigen2 room_shape_rand render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room_shape.room_shape_rand seed 3
infinigen2 room_shape_rand render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room_shape.room_shape_rand seed 4
infinigen2 room_shape_rand render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room_shape.room_shape_rand seed 5
infinigen2 room_shape_rand render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • dimensions (pf.Vector | None) -- (default: None)

  • floor_ceiling_offset_epsilon (float) -- (default: 0.005)

room_small_objects#

Place collections of small primitive objects onto room surfaces.

Geometry-node Poisson-scatter of a collection of small objects onto a parent surface: selecting upward-facing faces and instancing a collection at random-density, min-distance points.

The room-facing entrypoint builds a shared pool of primitives and scatters subsets of it onto each target’s real surface.

infinigen2.scenes.room.room_small_objects.objects_scatter_rand(
...,
) tuple[list[pf.MeshObject], CollisionSet][source]#

Per target, free scatter 2/3 of the time and a centered row 1/3; each target skipped with prob skip_prob. Returns placed + colliders.

Parameters:
infinigen2.scenes.room.room_small_objects.objects_scattered_on_surface(
...,
) tuple[list[pf.MeshObject], CollisionSet][source]#

Poisson-scatter small objects on each target’s real surface; each target skipped with prob skip_prob. spacing_factor=0 packs furniture surfaces densely. Returns placed + colliders.

Parameters:
infinigen2.scenes.room.room_small_objects.small_objects_collection_rand(rng) pf.Collection[source]#

One room-wide pool of small primitives to draw from per target. Each primitive’s origin is dropped to its base so instances sit on the surface.

Parameters:

rng (Generator)

room_surface_features#

class infinigen2.scenes.room.room_surface_features.CeilingFeaturesResult(...)[source]#

Bases: NamedTuple

floor: pf.MeshObject#
ceiling: pf.MeshObject#
backs: list[pf.MeshObject]#
sills: list[pf.MeshObject]#
light_meshes: list[pf.MeshObject]#
lights: list[LightObject]#
class infinigen2.scenes.room.room_surface_features.WallFeatureResult(...)[source]#

Bases: NamedTuple

wall_geom: list[pf.MeshObject]#
backs: list[pf.MeshObject]#
sills: list[pf.MeshObject]#
storage: list[pf.MeshObject]#
lights: list[LightObject]#
decorations: dict[str, list[pf.MeshObject]]#
class infinigen2.scenes.room.room_surface_features.WallFeaturesResult(...)[source]#

Bases: NamedTuple

wall_planes: list[pf.MeshObject]#
backs: list[pf.MeshObject]#
sills: list[pf.MeshObject]#
storage: list[pf.MeshObject]#
lights: list[LightObject]#
decorations: dict[str, list[pf.MeshObject]]#
infinigen2.scenes.room.room_surface_features.ceiling_feature_rand(
rng,
shape,
wall_thickness=0.1,
) CeilingFeaturesResult[source]#
Parameters:
infinigen2.scenes.room.room_surface_features.ceiling_light_bars_rand(
...,
) tuple[pf.MeshObject, list[pf.MeshObject], list[pf.MeshObject], list[pf.MeshObject], list[LightObject]][source]#
Parameters:
infinigen2.scenes.room.room_surface_features.ceiling_light_placement_rand(
rng,
ceiling,
dimensions,
) tuple[list[pf.MeshObject], list[LightObject]][source]#
Parameters:
infinigen2.scenes.room.room_surface_features.ceiling_skylights_rand(
rng,
ceiling,
ceiling_material,
) tuple[pf.MeshObject, list[pf.MeshObject], list[pf.MeshObject], list[pf.MeshObject], list[LightObject]][source]#
Parameters:
infinigen2.scenes.room.room_surface_features.cutout_spaced_instances(
...,
) tuple[pf.MeshObject, pf.MeshObject | None, pf.MeshObject | None, list[pf.MeshObject]][source]#

Cut instance-footprint niches in a surface and place instance aliases over them.

Returns (posed surface, sill or None, lightblocker or None, aliases). Instance template must be x-centered (flip-invariant w.r.t. UV sign).

Parameters:
infinigen2.scenes.room.room_surface_features.skirting_on_walls_rand(...) list[pf.MeshObject][source]#
Parameters:
infinigen2.scenes.room.room_surface_features.skirting_rand(rng, walls) list[pf.MeshObject][source]#
Parameters:
infinigen2.scenes.room.room_surface_features.upright_cabinet_footprint(width, height) pf.MeshObject[source]#

Flat (U=width, V=height) rect for niche-grid sizing of an up_aligned cabinet.

Parameters:
infinigen2.scenes.room.room_surface_features.wall_board_shelf_rand(
...,
) WallFeatureResult[source]#
Parameters:
infinigen2.scenes.room.room_surface_features.wall_cubby_rand(...) WallFeatureResult[source]#
Parameters:
infinigen2.scenes.room.room_surface_features.wall_decoration_rand(
...,
) WallFeatureResult[source]#
Parameters:
infinigen2.scenes.room.room_surface_features.wall_doors_rand(...) WallFeatureResult[source]#
Parameters:
infinigen2.scenes.room.room_surface_features.wall_feature_rand(
rng,
shape,
wall_thickness=0.1,
) WallFeaturesResult[source]#
Parameters:
infinigen2.scenes.room.room_surface_features.wall_full_window_rand(
...,
) WallFeatureResult[source]#
Parameters:
infinigen2.scenes.room.room_surface_features.wall_horizontal_split_rand(
...,
) WallFeatureResult[source]#
Parameters:
infinigen2.scenes.room.room_surface_features.wall_painting_grid_rand(
...,
) WallFeatureResult[source]#
Parameters:
infinigen2.scenes.room.room_surface_features.wall_plain_rand(...) WallFeatureResult[source]#
Parameters:
infinigen2.scenes.room.room_surface_features.wall_storage_flush_rand(
...,
) WallFeatureResult[source]#
Parameters:
infinigen2.scenes.room.room_surface_features.wall_storage_shelf_rand(
...,
) WallFeatureResult[source]#
Parameters:
infinigen2.scenes.room.room_surface_features.wall_vertical_split_rand(
...,
) WallFeatureResult[source]#
Parameters:
infinigen2.scenes.room.room_surface_features.wall_window_extrusion_rand(
...,
) WallFeatureResult[source]#
Parameters:
infinigen2.scenes.room.room_surface_features.wall_windows_rand(...) WallFeatureResult[source]#
Parameters:
infinigen2.scenes.room.room_surface_features.window_spaced_rand(
...,
) tuple[pf.MeshObject, pf.MeshObject | None, pf.MeshObject | None, list[pf.MeshObject]][source]#
Parameters:

Module contents#

asset_demo#

class infinigen2.scenes.asset_demo.DevSceneResult(all_objects, cameras, lights)[source]#

Bases: NamedTuple

all_objects: list#
cameras: list#
lights: list#
infinigen2.scenes.asset_demo.demo_cube(size=1.0) pf.MeshObject[source]#
Parameters:

size (float) -- (default: 1.0)

infinigen2.scenes.asset_demo.grid_plane() pf.MeshObject[source]#
infinigen2.scenes.asset_demo.hardcoded_camera(...) CameraObject[source]#
Parameters:
  • base_location (pf.Vector)

  • dist_mult (float) -- (default: 1)

  • elevation_deg (float) -- (default: 19)

  • altitude (float) -- (default: 2.2)

  • yaw_offset_deg (float) -- (default: 0)

infinigen2.scenes.asset_demo.material_banana(
rng,
material=None,
environment=None,
) DevSceneResult[source]#

Example renders

infinigen2.scenes.asset_demo.material_banana seed 0
infinigen2 material_banana render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_banana seed 1
infinigen2 material_banana render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_banana seed 2
infinigen2 material_banana render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_banana seed 3
infinigen2 material_banana render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_banana seed 4
infinigen2 material_banana render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_banana seed 5
infinigen2 material_banana render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.asset_demo.material_cube(
rng,
material=None,
environment=None,
) DevSceneResult[source]#

Example renders

infinigen2.scenes.asset_demo.material_cube seed 0
infinigen2 material_cube render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_cube seed 1
infinigen2 material_cube render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_cube seed 2
infinigen2 material_cube render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_cube seed 3
infinigen2 material_cube render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_cube seed 4
infinigen2 material_cube render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_cube seed 5
infinigen2 material_cube render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.asset_demo.material_monkey(
rng,
material=None,
environment=None,
) DevSceneResult[source]#

Example renders

infinigen2.scenes.asset_demo.material_monkey seed 0
infinigen2 material_monkey render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_monkey seed 1
infinigen2 material_monkey render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_monkey seed 2
infinigen2 material_monkey render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_monkey seed 3
infinigen2 material_monkey render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_monkey seed 4
infinigen2 material_monkey render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_monkey seed 5
infinigen2 material_monkey render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.asset_demo.material_plane_horizontal_uv(
rng,
material=None,
environment=None,
) DevSceneResult[source]#

Example renders

infinigen2.scenes.asset_demo.material_plane_horizontal_uv seed 0
infinigen2 material_plane_horizontal_uv render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_plane_horizontal_uv seed 1
infinigen2 material_plane_horizontal_uv render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_plane_horizontal_uv seed 2
infinigen2 material_plane_horizontal_uv render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_plane_horizontal_uv seed 3
infinigen2 material_plane_horizontal_uv render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_plane_horizontal_uv seed 4
infinigen2 material_plane_horizontal_uv render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_plane_horizontal_uv seed 5
infinigen2 material_plane_horizontal_uv render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.asset_demo.material_plane_orthographic(...) DevSceneResult[source]#

Orthographic top-down plane scene for pixel-perfect GT validation.

Every pixel sees the same flat plane face: object index is uniform and all surface normals point straight up (+Z world space).

Example renders

infinigen2.scenes.asset_demo.material_plane_orthographic seed 0
infinigen2 material_plane_orthographic render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_plane_orthographic seed 1
infinigen2 material_plane_orthographic render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_plane_orthographic seed 2
infinigen2 material_plane_orthographic render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_plane_orthographic seed 3
infinigen2 material_plane_orthographic render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_plane_orthographic seed 4
infinigen2 material_plane_orthographic render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_plane_orthographic seed 5
infinigen2 material_plane_orthographic render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.asset_demo.material_plane_uv(
rng,
material=None,
environment=None,
) DevSceneResult[source]#

Example renders

infinigen2.scenes.asset_demo.material_plane_uv seed 0
infinigen2 material_plane_uv render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_plane_uv seed 1
infinigen2 material_plane_uv render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_plane_uv seed 2
infinigen2 material_plane_uv render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_plane_uv seed 3
infinigen2 material_plane_uv render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_plane_uv seed 4
infinigen2 material_plane_uv render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_plane_uv seed 5
infinigen2 material_plane_uv render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.asset_demo.material_sphere(...) DevSceneResult[source]#

Example renders

infinigen2.scenes.asset_demo.material_sphere seed 0
infinigen2 material_sphere render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_sphere seed 1
infinigen2 material_sphere render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_sphere seed 2
infinigen2 material_sphere render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_sphere seed 3
infinigen2 material_sphere render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_sphere seed 4
infinigen2 material_sphere render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_sphere seed 5
infinigen2 material_sphere render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • material (pf.Material | None) -- (default: None)

  • environment (World | None) -- (default: None)

  • subdivisions (int) -- (default: 4)

  • radius (float) -- (default: 0.75)

infinigen2.scenes.asset_demo.material_torus_uv(...) DevSceneResult[source]#

Example renders

infinigen2.scenes.asset_demo.material_torus_uv seed 0
infinigen2 material_torus_uv render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_torus_uv seed 1
infinigen2 material_torus_uv render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_torus_uv seed 2
infinigen2 material_torus_uv render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_torus_uv seed 3
infinigen2 material_torus_uv render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_torus_uv seed 4
infinigen2 material_torus_uv render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.material_torus_uv seed 5
infinigen2 material_torus_uv render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
  • rng (Generator)

  • material (pf.Material | None) -- (default: None)

  • environment (World | None) -- (default: None)

  • major_radius (float) -- (default: 0.5)

  • minor_radius (float) -- (default: 0.25)

infinigen2.scenes.asset_demo.object_demo(...) DevSceneResult[source]#

Example renders

infinigen2.scenes.asset_demo.object_demo seed 0
infinigen2 object_demo render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.object_demo seed 1
infinigen2 object_demo render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.object_demo seed 2
infinigen2 object_demo render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.object_demo seed 3
infinigen2 object_demo render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.object_demo seed 4
infinigen2 object_demo render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.asset_demo.object_demo seed 5
infinigen2 object_demo render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.asset_demo.scale_reference(location, radius=0.3) pf.MeshObject[source]#
Parameters:

collision_collection#

class infinigen2.scenes.collision_collection.CollisionSet(
objs: 'list[pf.Object]',
collision_manager: 'trimesh.collision.CollisionManager',
object_names: 'dict[int, str]',
mesh_colliders: 'dict[int, trimesh.Trimesh]',
mesh_fcl_colliders: 'dict[int, Any]',
object_fcl_objs: 'dict[int, Any]',
object_last_transforms: 'dict[int, np.ndarray]',
)[source]#

Bases: object

Parameters:
infinigen2.scenes.collision_collection.any_self_collision(col) bool[source]#

Return True if any two objects in the set currently intersect each other.

Parameters:

col (CollisionSet)

infinigen2.scenes.collision_collection.box_intersection_test(col, transform, size=1.0) bool[source]#
Parameters:
infinigen2.scenes.collision_collection.collision_set(objs, existing=None) CollisionSet[source]#
Parameters:
infinigen2.scenes.collision_collection.intersection_test(col, obj) bool[source]#
Parameters:
infinigen2.scenes.collision_collection.n_colliders(col) int[source]#
Parameters:

col (CollisionSet)

infinigen2.scenes.collision_collection.raycast(col, ray_origins, ray_directions) Any[source]#

Raycast over the combined mesh from tracked colliders.

Parameters:

floating_objects#

class infinigen2.scenes.floating_objects.FloatingObjectsResult(all_objects, colliders)[source]#

Bases: NamedTuple

all_objects: list[pf.MeshObject]#
colliders: CollisionSet#
infinigen2.scenes.floating_objects.floating_lights_rand(...) FloatingObjectsResult[source]#

Create up to max_lights colored point lights and place them in bbox.

Parameters:
infinigen2.scenes.floating_objects.floating_object_asset_rand(rng) pf.MeshObject[source]#
Parameters:

rng (Generator)

infinigen2.scenes.floating_objects.floating_objects_rand(...) FloatingObjectsResult[source]#
Parameters:
  • colliders (CollisionSet | None) -- Existing collision set to extend. Defaults to an empty set.

  • bbox (tuple[ndarray, ndarray] | None) -- Bounding box for placement. Defaults to a [-10, 10]^3 cube.

  • floating_objects (list[pf.MeshObject] | None) -- If provided, place these objects instead of sampling new ones.

  • volume_density (float) -- Roughly what percent of the box’s volume should we fill when sampling.

  • check_collisions (bool) -- If False, do not add the placed objects to the returned collision set.

  • rng (Generator)

infinigen2.scenes.floating_objects.point_lamp_colored_rand(...) LightObject[source]#

A point light whose emission uses a fully-random RGB color.

Parameters:
infinigen2.scenes.floating_objects.rotated_bbox_extents(obj, rot, scale) tuple[ndarray, ndarray][source]#

Return (min, max) of the object’s local bbox corners after applying rot and scale, centered at origin.

Parameters:

placement_utils#

infinigen2.scenes.placement_utils.delete_object(obj)[source]#
Parameters:

obj (Object)

infinigen2.scenes.placement_utils.distribute_in_bbox(...) list[Object][source]#

Place each object at a uniformly-random location inside bbox, keeping its current rotation and scale, fitting its bounding box within the box, and (when colliders is non-empty) rejection-sampling up to attempts times so mesh placements avoid that collision set. Mutates each object’s location in place.

Parameters:
infinigen2.scenes.placement_utils.duplicates(...) list[Object][source]#
Parameters:
infinigen2.scenes.placement_utils.keep_non_colliding(
items,
colliders,
key=<function <lambda>>,
) tuple[list[infinigen2.scenes.placement_utils.T], CollisionSet][source]#

Keep each item whose key(item) mesh doesn’t collide with colliders or an already-kept item, folding kept meshes into the set. Skips Nones; rejected items are dropped (not deleted) and removed later by scene autocleanup.

Parameters:
infinigen2.scenes.placement_utils.repeat_attempts(...) infinigen2.scenes.placement_utils.T | None[source]#
Parameters:
infinigen2.scenes.placement_utils.snap_to_plane(...)[source]#

Snap child to parent using bbox sides with canonical local coordinates.

TODO: allow constraint_axis=None and 2D offsets within bounding box free dirs

Parameters:
  • child (Object) -- Object to position

  • parent (Object) -- Object to snap to

  • placement (float) -- How far left or right along to place the object, relative to the parent and the constraint axis e.g. if constraint_axis=(0, 0, 1), placement=0.5 means centered, 0 means left edge of parent’s bbox, 1 means right edge of parent’s bbox.

  • child_side (str) -- Which side of child touches the parent

  • parent_side (str) -- Which side of parent touches the child

  • margin (float) -- Gap between surfaces

  • constraint_axis (pf.Vector) -- Axis to constrain the placement to. The location wont change along this axis, and we may rotate the object around this axis to snap it.

  • overhang (bool) -- If true, only the center of the childs bbox must attach to the parent, rather than the entire side of the bbox touching the parent.

Module contents#