This repository provides a simple and scalable pipeline for layout-to-scene object retrieval, focusing on matching 3D room layouts with relevant 3D objects and rendering them for visualization. This repo is part of our paper: M3DLayout-A-Multi-Source-Dataset-of-3D-Indoor-Layouts-and-Structured-Descriptions. If you find our work helpful, please consider citing
Our approach follows a straightforward workflow:
- Layout Parsing – Read the input layout file and extract room and object placement information.
- Object Retrieval – For each object category in the layout, retrieve candidate 3D models from a pre-built object index for shape similarity.
- Scene Composition – Assemble the retrieved 3D objects into a coherent scene according to the layout constraints.
- Rendering – Render the composed scene using Blender with specified resolution and camera settings.
This pipeline is designed to be lightweight, reproducible, and extensible, enabling researchers to quickly test layout-based scene generation and retrieval tasks.
Clone our repo:
git clone https://github.com/Graphic-Kiliani/Object-Retrieval-Layout2Scene.gitDownload Blender's latest version:
# Blender 4.5.3
wget https://mirror.freedif.org/blender/release/Blender4.5/blender-4.5.3-linux-x64.tar.xz
tar -xzvf blender-4.5.3-linux-x64.tar.xz -C <path_to_target_dir>We use a curated dataset containing 3D objects categorized by type, designed to support layout-based retrieval tasks. Our retrieval dataset includes 95 types of objects which covers nearly all common indoor objects.
- Dataset link: Download Here
| Category | Objects (95 in total) |
|---|---|
| Lighting | lighting, ceiling-lamp, pendant.lamp, floor.lamp, desk.lamp, fan |
| Tables | table, coffee_table, console_table, corner_side_table, round_end_table, dining_table, dressing_table, side_table, nightstand, desk, tv_stand |
| Seating | seating, chair, lounge_chair, chinese_chair, dining_chair, dressing_chair, stool, sofa, loveseat_sofa, l_shaped_sofa, multi_seat_sofa |
| Beds | bed, kids_bed |
| Shelves & Book storage | shelf, shelving, large_shelf, cell_shelf, bookshelf, book, book_column, book_stack, nature_shelf_trinkets |
| Cabinets & Wardrobes | cabinet, kitchen_cabinet, children_cabinet, wardrobe, wine_cabinet |
| Appliances & Electronics | appliances, microwave, oven, beverage_fridge, tv, monitor, tv_monitor |
| Kitchen & Tableware | pan, pot, plate, bowl, cup, bottle, can, jar, wineglass, chopsticks, knife, fork, spoon, food_bag, food_box, fruit_container |
| Bathroom fixtures | bathtub, shower, sink, standing_sink, toilet, toilet_paper, toiletry, faucet, towel |
| Doors, Windows & Coverings | glass_panel_door, lite_door, window, blinds, curtain, vent |
| Hardware & Controls | hardware, handle, light_switch |
| Decor | plant, large-plant-container, plant-container, vase, wall_art, picture, mirror, statue, basket, balloon, cushion, rug, decoration |
| Containers & Waste | bag, box, container, clutter, trashcan |
| Architecture & Elements | counter, fireplace, pipe, furniture |
| Clothes | clothes |
| Spaces | kitchen_space |
| Gym & Misc | gym_equipment |
Category list of retrieval objects
You can also add your desired object category and 3D assets according to our dataset format. However, in order to correctly integrate with our object retrieval process, you should first uniform the orientation within specific category under your model's/platform's coordinate system, and index the size information for calculating shape similarity with following code:
# Processing the whole root dir
python build_glb_index.py --input-path <path_to_dataset_dir>
# Processing Single Category
python build_glb_index.py --input-path <path_to_added_category_dir>Afterwards, you will obtain or see changes in glb_index.json file.
We provide an example JSON file containing room layout information for testing and reproducing results.
- Test JSON link:
assets/test.json
After downloading the dataset and the test JSON file, modify the json path and dataset path in main.py, you can run:
See arguments'definition in main.py:
<path_to_blender> --background --python main.py -- \
--input_json <path_to_room_json> \
--out_dir <output_dir_path> \
--obj_folder <retrieval_assets_dir_path> \
--glb_index <glb_json_path> \
--save_blend \
--scene_id <num>
--colorizeBesides, you can palette your favourite color in colors_mapping.json when you turn on --colorize to get pure colorful topdown images.
Afterwards, you will obtain corresponding topdown.png and scene.blend according to your input scene info json.
![]() Bedroom |
![]() Diningroom |
![]() Livingroom |
The first row displays the retrieved 3D scenes' renderings with pure color schemes. The second row shows the retrieved 3D scenes' renderings with original textures applied. The pure color renderings eliminate the influence of textures, making it easier to assess the layout's alignment and object retrieval accuracy using metrics like FID and KID. Meanwhile, the textured renderings offer a visually richer evaluation and applications for users.
We provide tools to visualize layout/Scene in image or gif form. Before that, you only need to convert your scene info json format into ours. (Check it in Test JSON link and parameters.json in the assets folder)
See arguments'definition in visualization_mlayout.py/visualization_scene.py
python visualization_mlayout.py <path_to_room_json> --scene_id <num> --label_small --small_thresh <num> --flipover --azimuth_offset <num>
![]() Bedroom |
![]() Diningroom |
![]() Livingroom |







