Scenes (.scenes)

Contents

Scenes (.scenes)#

Placement (.scenes.placement)#

collision#

class infinigen2.scenes.placement.collision.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.placement.collision.any_self_collision(col) bool[source]#

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

Parameters:

col (CollisionSet)

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

col (CollisionSet)

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

Raycast over the combined mesh from tracked colliders.

Parameters:

culling#

infinigen2.scenes.placement.culling.keep_non_colliding(
items,
colliders,
key=<function <lambda>>,
) tuple[list[infinigen2.scenes.placement.culling.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.culling.keep_unobstructed(...) list[infinigen2.scenes.placement.culling.T][source]#

Drop each item whose key(item) center a collider separates from center (e.g. a wall between a rug and the sofa, or beyond a wall-snapped table). Reads colliders but does not update them; skips Nones.

Parameters:
infinigen2.scenes.placement.culling.place_surrounding(
...,
) tuple[list[pf.MeshObject], CollisionSet][source]#

Arrange items around parent with arrange_fn(rng, parent), drop any a collider separates from the parent (a wall-snapped tableโ€™s wall-side chairs land outside the room, with the wall between them and the table), cull the rest against colliders, and re-sample the whole arrangement via repeat_attempts until at least min_kept survive. colliders must exclude parent so the obstruction ray sees the wall behind it, not the parent itself. Suits chairs around a dining table or stools around a kitchen island, where one bulky design can collide every item away.

Parameters:

distribute#

infinigen2.scenes.placement.distribute.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.distribute.duplicates(...) list[Object][source]#
Parameters:
infinigen2.scenes.placement.distribute.propagate_modifiers_to_instances(templates, instances)[source]#
Parameters:

retry#

infinigen2.scenes.placement.retry.repeat_attempts(...) infinigen2.scenes.placement.retry.T | None[source]#
Parameters:

snap#

infinigen2.scenes.placement.snap.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#

Rooms (.scenes.room)#

room#

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

Bases: NamedTuple

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

A furnished living room whose centerpiece is a sofa grouping.

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)

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

Everything livingroom_rand does, but the furniture centerpiece is a choice between a sofa grouping and a dining setup (table with chairs around it).

Example renders

infinigen2.scenes.room.room.room_rand seed 0
infinigen2 room_rand render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_rand seed 1
infinigen2 room_rand render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_rand seed 2
infinigen2 room_rand render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_rand seed 3
infinigen2 room_rand render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_rand seed 4
infinigen2 room_rand render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room.room_rand seed 5
infinigen2 room_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.CenteredSofaSetupResult(...)[source]#

Bases: NamedTuple

sofas: list[MeshResult]#
coffee_tables: list[MeshResult]#
rugs: list[pf.MeshObject]#
all_objects: list[pf.MeshObject]#
class infinigen2.scenes.room.room_furniture.DiningSetupResult(dining_table, chairs, all_objects)[source]#

Bases: NamedTuple

dining_table: pf.MeshObject#
chairs: list[pf.MeshObject]#
all_objects: list[pf.MeshObject]#
class infinigen2.scenes.room.room_furniture.DiningTableSetupResult(...)[source]#

Bases: NamedTuple

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

Bases: Protocol

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

Bases: NamedTuple

sofas: list[MeshResult]#
coffee_tables: list[MeshResult]#
side_tables: list[MeshResult]#
rugs: list[pf.MeshObject]#
all_objects: list[pf.MeshObject]#
class infinigen2.scenes.room.room_furniture.WallSofaSetupResult(...)[source]#

Bases: NamedTuple

sofas: list[MeshResult]#
coffee_tables: list[MeshResult]#
rugs: list[pf.MeshObject]#
all_objects: list[pf.MeshObject]#
infinigen2.scenes.room.room_furniture.arrange_dining_chairs(...) list[pf.MeshObject][source]#

Instance chair_obj around the sides of dining_table, facing inward, posed by the tableโ€™s current transform, and realize the instances into one object per chair. Table and chair footprints are measured from bounding boxes inside the nodegraph. chair_spacing is the gap between adjacent chairs, tuck the meters the chair front is pulled in past the table edge (negative leaves a gap), edge_margin the clearance kept at each table corner so chairs never overhang the ends, rot_jitter the random per-chair z rotation (radians). include_ends toggles the chairs on the +/-Y ends.

Parameters:
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(
...,
) CenteredSofaSetupResult[source]#

Sofas ringing a central rug facing inward, with an optional center coffee table. Works without walls, so it is registered as a standalone Scene; wall_planes is accepted only for signature parity with the wall variant.

Example renders

infinigen2.scenes.room.room_furniture.centered_sofa_setup_rand seed 0
infinigen2 centered_sofa_setup_rand render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room_furniture.centered_sofa_setup_rand seed 1
infinigen2 centered_sofa_setup_rand render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room_furniture.centered_sofa_setup_rand seed 2
infinigen2 centered_sofa_setup_rand render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room_furniture.centered_sofa_setup_rand seed 3
infinigen2 centered_sofa_setup_rand render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room_furniture.centered_sofa_setup_rand seed 4
infinigen2 centered_sofa_setup_rand render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.room.room_furniture.centered_sofa_setup_rand seed 5
infinigen2 centered_sofa_setup_rand render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.room.room_furniture.dining_setup_rand(...) DiningSetupResult[source]#

A dining table with a single dining chair design instanced around all four sides facing inward. Builds the table, one chair, then arranges copies of the chair around it; chairs follow the tableโ€™s pose. Pass dining_table to arrange chairs around an existing (already posed) table instead of sampling one.

Example renders

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

  • chair_spacing (float | None) -- (default: None)

  • tuck (float | None) -- (default: None)

  • edge_margin (float | None) -- (default: None)

  • rot_jitter (float | None) -- (default: None)

  • include_ends (bool | None) -- (default: None)

  • dining_table (pf.MeshObject | None) -- (default: None)

infinigen2.scenes.room.room_furniture.dining_table_setup_rand(
...,
) DiningTableSetupResult[source]#

Place a dining table (3/4 in clear floor space, 1/4 snapped to a wall), then arrange chairs around the posed table, plus an optional rug. Chairs are culled against colliders and dropped when a wall separates them from the table (a wall-snapped tableโ€™s wall-side chairs land outside the room), retrying the arrangement with a fresh chair design and margins when too few survive.

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.side_table_object_rand(rng) MeshResult[source]#
Parameters:

rng (Generator)

infinigen2.scenes.room.room_furniture.snap_back_front(...)[source]#
Parameters:
infinigen2.scenes.room.room_furniture.snap_on_top(...)[source]#
Parameters:
infinigen2.scenes.room.room_furniture.sofa_lamps_rand(
...,
) tuple[list[MeshResult], list[MeshResult], list[LightObject], CollisionSet][source]#

Place floor lamps beside sofa_meshes and table lamps atop side_table_meshes, culling against colliders. Returns (floor_lamps, table_lamps, lights, colliders); each lampโ€™s light is kept in lights ~2/3 of the time.

Parameters:
infinigen2.scenes.room.room_furniture.sofa_setup_rand(...) SofaSetupResult[source]#

A sofa grouping (choice of wall-snapped or rug-centered) plus side tables beside the sofas. wall_planes passes through to the wall-snapped variant. Lamps are placed by the caller from the returned sofas and side tables (see sofa_lamps_rand).

Parameters:
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)

infinigen2.scenes.room.room_furniture.wall_sofa_setup_rand(...) WallSofaSetupResult[source]#

Sofas snapped against the walls, plus an optional rug. Needs posed wall planes, so it is not registered as a standalone Scene.

Parameters:

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.CutoutResult(...)[source]#

Bases: NamedTuple

geom: pf.MeshObject#
sill: pf.MeshObject | None#
lightblocker: pf.MeshObject | None#
aliases: list[pf.MeshObject]#
trim_edges: CurveObject | None#
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(
...,
) CutoutResult[source]#

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

Instance template must be x-centered (flip-invariant w.r.t. UV sign). trim_edges is the sharp mouth outline of every cutout on the wall surface, posed like the wall, with curve normals pre-set for sweeping a trim profile.

Parameters:
infinigen2.scenes.room.room_surface_features.cutout_trim_rand(...) pf.MeshObject[source]#

Sweep a symmetric trim profile around cutout mouth outlines (window casing).

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 wall-frame rect (Y=width=U, Z=height=V) for niche-grid sizing.

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(...) CutoutResult[source]#
Parameters:

Module contents#

demo_curve#

infinigen2.scenes.demo_curve.curve_demo(...) DevSceneResult[source]#

Emit a representative base path curve into the pipeline state, and render it swept with a default profile so it stands alone as a scene. Downstream curve generators receive the path via their curve / base_curve parameter.

Example renders

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

Example renders

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

  • size (float) -- (default: 1.5)

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

  • fillet_small (float) -- (default: 0.1)

demo_material#

infinigen2.scenes.demo_material.material_banana(
rng,
material=None,
environment=None,
) DevSceneResult[source]#
Parameters:
infinigen2.scenes.demo_material.material_cube(
rng,
material=None,
environment=None,
) DevSceneResult[source]#
Parameters:
infinigen2.scenes.demo_material.material_monkey(
rng,
material=None,
environment=None,
) DevSceneResult[source]#
Parameters:
infinigen2.scenes.demo_material.material_plane_horizontal_uv(
rng,
material=None,
environment=None,
) DevSceneResult[source]#
Parameters:
infinigen2.scenes.demo_material.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).

Parameters:
infinigen2.scenes.demo_material.material_plane_uv(
rng,
material=None,
environment=None,
) DevSceneResult[source]#
Parameters:
infinigen2.scenes.demo_material.material_sphere(...) DevSceneResult[source]#
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.demo_material.material_torus_uv(...) DevSceneResult[source]#
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)

demo_object#

infinigen2.scenes.demo_object.object_demo(...) DevSceneResult[source]#
Parameters:

demo_util#

class infinigen2.scenes.demo_util.DevSceneResult(...)[source]#

Bases: NamedTuple

all_objects: list#
cameras: list#
lights: list#
environment: World | None#
curves: list#
infinigen2.scenes.demo_util.demo_cube(size=1.0) pf.MeshObject[source]#
Parameters:

size (float) -- (default: 1.0)

infinigen2.scenes.demo_util.grid_plane() pf.MeshObject[source]#
infinigen2.scenes.demo_util.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.demo_util.scale_reference(location, radius=0.3) pf.MeshObject[source]#
Parameters:

floating_objects#

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

Bases: NamedTuple

all_objects: list[pf.MeshObject]#
colliders: CollisionSet#
class infinigen2.scenes.floating_objects.ObjWithPostprocessingResult(mesh)[source]#

Bases: NamedTuple

mesh: pf.MeshObject#
class infinigen2.scenes.floating_objects.ObjectResult(mesh)[source]#

Bases: NamedTuple

mesh: pf.MeshObject#
infinigen2.scenes.floating_objects.floating_lights_rand(...) FloatingObjectsResult[source]#

Place colored point lights in bbox, sampling shared-wattage lights when none given.

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 [0, 5]^3 cube, so this is a usable standalone Scene generator with no room walls around it.

  • 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.

  • size_scale (float) -- Multiplier on the sampled object size (mean/spread/max), e.g. 2.0 for larger props. The object count is divided by size_scale**3 so the filled volume stays near volume_density.

  • rng (Generator)

Example renders

infinigen2.scenes.floating_objects.floating_objects_rand seed 0
infinigen2 floating_objects_rand render_cycles --seed 0 --passes rgb -r 480 480 -s 256
infinigen2.scenes.floating_objects.floating_objects_rand seed 1
infinigen2 floating_objects_rand render_cycles --seed 1 --passes rgb -r 480 480 -s 256
infinigen2.scenes.floating_objects.floating_objects_rand seed 2
infinigen2 floating_objects_rand render_cycles --seed 2 --passes rgb -r 480 480 -s 256
infinigen2.scenes.floating_objects.floating_objects_rand seed 3
infinigen2 floating_objects_rand render_cycles --seed 3 --passes rgb -r 480 480 -s 256
infinigen2.scenes.floating_objects.floating_objects_rand seed 4
infinigen2 floating_objects_rand render_cycles --seed 4 --passes rgb -r 480 480 -s 256
infinigen2.scenes.floating_objects.floating_objects_rand seed 5
infinigen2 floating_objects_rand render_cycles --seed 5 --passes rgb -r 480 480 -s 256
Parameters:
infinigen2.scenes.floating_objects.lights_with_shared_wattage_rand(
rng,
quantity=None,
wattage=None,
) list[LightObject][source]#

Create quantity colored point lights whose energies sum to wattage.

Parameters:
  • rng (Generator)

  • quantity (int | None) -- (default: None)

  • wattage (float | None) -- (default: None)

infinigen2.scenes.floating_objects.obj_with_postprocessing(
rng,
) ObjWithPostprocessingResult[source]#

Example renders

infinigen2.scenes.floating_objects.obj_with_postprocessing seed 0
infinigen2 obj_with_postprocessing object_demo render_cycles --seed 0 --passes rgb -r 512 512 -s 128
infinigen2.scenes.floating_objects.obj_with_postprocessing seed 1
infinigen2 obj_with_postprocessing object_demo render_cycles --seed 1 --passes rgb -r 512 512 -s 128
infinigen2.scenes.floating_objects.obj_with_postprocessing seed 2
infinigen2 obj_with_postprocessing object_demo render_cycles --seed 2 --passes rgb -r 512 512 -s 128
infinigen2.scenes.floating_objects.obj_with_postprocessing seed 3
infinigen2 obj_with_postprocessing object_demo render_cycles --seed 3 --passes rgb -r 512 512 -s 128
infinigen2.scenes.floating_objects.obj_with_postprocessing seed 4
infinigen2 obj_with_postprocessing object_demo render_cycles --seed 4 --passes rgb -r 512 512 -s 128
infinigen2.scenes.floating_objects.obj_with_postprocessing seed 5
infinigen2 obj_with_postprocessing object_demo render_cycles --seed 5 --passes rgb -r 512 512 -s 128
Parameters:

rng (Generator)

infinigen2.scenes.floating_objects.object_rand(rng) ObjectResult[source]#
Parameters:

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:

Module contents#