mirror of
https://github.com/AvaLovelace1/LegoGPT.git
synced 2026-04-28 02:40:59 -05:00
544 lines
33 KiB
HTML
544 lines
33 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
|
||
<!-- Metadata -->
|
||
<title>Generating Physically Stable and Buildable Brick Structures from Text</title>
|
||
<meta name="description"
|
||
content="Official website for BrickGPT, the first approach for generating physically stable toy brick models from text prompts.">
|
||
|
||
<meta property="og:title" content="Generating Physically Stable and Buildable Brick Structures from Text">
|
||
<meta property="og:description"
|
||
content="Official website for BrickGPT, the first approach for generating physically stable toy brick models from text prompts.">
|
||
<meta property="og:url" content="https://avalovelace1.github.io/BrickGPT/">
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:image" content="images-optimized/teaser-1080.webp">
|
||
<meta property="og:video" content="videos/brickgpt-v2.mp4">
|
||
|
||
<!-- Favicon -->
|
||
<link rel="icon" type="image/png" href="./favicon/favicon-96x96.png" sizes="96x96"/>
|
||
<link rel="icon" type="image/svg+xml" href="./favicon/favicon.svg"/>
|
||
<link rel="shortcut icon" href="./favicon/favicon.ico"/>
|
||
<link rel="apple-touch-icon" sizes="180x180" href="./favicon/apple-touch-icon.png"/>
|
||
<meta name="apple-mobile-web-app-title" content="BrickGPT"/>
|
||
<link rel="manifest" href="./favicon/site.webmanifest"/>
|
||
|
||
<!-- Fonts -->
|
||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link href="https://fonts.googleapis.com/css2?family=Handlee&family=Source+Code+Pro:ital,wght@0,200..900;1,200..900&family=Source+Sans+3:ital,wght@0,200..900;1,200..900&family=Source+Serif+4:ital,opsz,wght@0,8..60,200..900;1,8..60,200..900&display=swap"
|
||
rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||
|
||
<!-- Styles -->
|
||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/css/bootstrap.min.css" rel="stylesheet"
|
||
integrity="sha384-LN+7fdVzj6u52u30Kp6M/trliBMCMKTyK833zpbD+pXdCLuTusPj697FH4R/5mcr" crossorigin="anonymous">
|
||
<link rel="stylesheet" href="./css/styles.css">
|
||
|
||
<!-- Photoswipe -->
|
||
<link href="https://cdn.jsdelivr.net/npm/photoswipe@5.4.4/dist/photoswipe.min.css" rel="preload" as="style"
|
||
onload="this.onload=null;this.rel='stylesheet'">
|
||
</head>
|
||
|
||
<body id="pswp-gallery">
|
||
<header>
|
||
<div class="container d-flex flex-column align-items-center py-5">
|
||
<div class="text-center mb-4 max-w-lg">
|
||
<hgroup class="mb-4">
|
||
<h1 class="display-4 text-balance">Generating Physically Stable and Buildable Brick Structures from Text</h1>
|
||
<p class="display-6 font-sans text-secondary text-balance">ICCV 2025 <strong>(Best Paper, Marr Prize)</strong></p>
|
||
</hgroup>
|
||
<div class="mb-3">
|
||
<ul class="list-unstyled d-flex flex-wrap justify-content-center column-gap-2 fs-5 mb-2">
|
||
<li>
|
||
<a class="badge text-bg-light link-body-emphasis" href="https://avapun.com/"
|
||
target="_blank" rel="author external noopener noreferrer">Ava Pun*</a>
|
||
</li>
|
||
<li>
|
||
<a class="badge text-bg-light link-body-emphasis" href="https://dunbar12138.github.io/"
|
||
target="_blank" rel="author external noopener noreferrer">Kangle Deng*</a>
|
||
</li>
|
||
<li>
|
||
<a class="badge text-bg-light link-body-emphasis" href="https://waynekyrie.github.io/"
|
||
target="_blank" rel="author external noopener noreferrer">Ruixuan Liu*</a>
|
||
</li>
|
||
<li>
|
||
<a class="badge text-bg-light link-body-emphasis" href="https://www.cs.cmu.edu/~deva/"
|
||
target="_blank" rel="author external noopener noreferrer">Deva Ramanan</a>
|
||
</li>
|
||
<li>
|
||
<a class="badge text-bg-light link-body-emphasis"
|
||
href="https://www.ri.cmu.edu/ri-faculty/changliu-liu/"
|
||
target="_blank" rel="author external noopener noreferrer">Changliu Liu</a>
|
||
</li>
|
||
<li>
|
||
<a class="badge text-bg-light link-body-emphasis" href="https://www.cs.cmu.edu/~junyanz/"
|
||
target="_blank" rel="author external noopener noreferrer">Jun-Yan Zhu</a>
|
||
</li>
|
||
</ul>
|
||
<div class="fs-5">Carnegie Mellon University</div>
|
||
</div>
|
||
<p class="text-secondary"><small>*Equal contribution</small></p>
|
||
</div>
|
||
|
||
<ul class="list-unstyled d-flex flex-wrap justify-content-center column-gap-3 row-gap-2">
|
||
<li>
|
||
<a class="btn btn-dark d-flex column-gap-2 align-items-center"
|
||
href="https://arxiv.org/abs/2505.05469" target="_blank" rel="external noopener noreferrer">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" class="bi bi-file-earmark-text-fill"
|
||
viewBox="0 0 16 16">
|
||
<path fill="currentColor"
|
||
d="M9.293 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V4.707A1 1 0 0 0 13.707 4L10 .293A1 1 0 0 0 9.293 0M9.5 3.5v-2l3 3h-2a1 1 0 0 1-1-1M4.5 9a.5.5 0 0 1 0-1h7a.5.5 0 0 1 0 1zM4 10.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m.5 2.5a.5.5 0 0 1 0-1h4a.5.5 0 0 1 0 1z"/>
|
||
</svg>
|
||
<span>Paper</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a class="btn btn-dark d-flex column-gap-2 align-items-center" href="./brickgpt-poster.pdf">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" class="bi bi-postcard-fill"
|
||
viewBox="0 0 16 16">
|
||
<path fill="currentColor" d="M11 8h2V6h-2z"/>
|
||
<path fill="currentColor" d="M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm8.5.5a.5.5 0 0 0-1 0v7a.5.5 0 0 0 1 0zM2 5.5a.5.5 0 0 0 .5.5H6a.5.5 0 0 0 0-1H2.5a.5.5 0 0 0-.5.5M2.5 7a.5.5 0 0 0 0 1H6a.5.5 0 0 0 0-1zM2 9.5a.5.5 0 0 0 .5.5H6a.5.5 0 0 0 0-1H2.5a.5.5 0 0 0-.5.5m8-4v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 0-.5.5"/>
|
||
</svg>
|
||
<span>Poster</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a class="btn btn-dark d-flex column-gap-2 align-items-center" href="./demo">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" class="bi bi-rocket-takeoff-fill"
|
||
viewBox="0 0 16 16">
|
||
<path fill="currentColor"
|
||
d="M12.17 9.53c2.307-2.592 3.278-4.684 3.641-6.218.21-.887.214-1.58.16-2.065a3.6 3.6 0 0 0-.108-.563 2 2 0 0 0-.078-.23V.453c-.073-.164-.168-.234-.352-.295a2 2 0 0 0-.16-.045 4 4 0 0 0-.57-.093c-.49-.044-1.19-.03-2.08.188-1.536.374-3.618 1.343-6.161 3.604l-2.4.238h-.006a2.55 2.55 0 0 0-1.524.734L.15 7.17a.512.512 0 0 0 .433.868l1.896-.271c.28-.04.592.013.955.132.232.076.437.16.655.248l.203.083c.196.816.66 1.58 1.275 2.195.613.614 1.376 1.08 2.191 1.277l.082.202c.089.218.173.424.249.657.118.363.172.676.132.956l-.271 1.9a.512.512 0 0 0 .867.433l2.382-2.386c.41-.41.668-.949.732-1.526zm.11-3.699c-.797.8-1.93.961-2.528.362-.598-.6-.436-1.733.361-2.532.798-.799 1.93-.96 2.528-.361s.437 1.732-.36 2.531Z"/>
|
||
<path fill="currentColor"
|
||
d="M5.205 10.787a7.6 7.6 0 0 0 1.804 1.352c-1.118 1.007-4.929 2.028-5.054 1.903-.126-.127.737-4.189 1.839-5.18.346.69.837 1.35 1.411 1.925"/>
|
||
</svg>
|
||
<span>Demo</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a class="btn btn-dark d-flex column-gap-2 align-items-center"
|
||
href="https://github.com/AvaLovelace1/BrickGPT/" target="_blank" rel="external noopener noreferrer">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" class="bi bi-github"
|
||
viewBox="0 0 16 16">
|
||
<path fill="currentColor"
|
||
d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8"/>
|
||
</svg>
|
||
<span>Code</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a class="btn btn-dark d-flex column-gap-2 align-items-center"
|
||
href="https://huggingface.co/datasets/AvaLovelace/StableText2Brick" target="_blank"
|
||
rel="external noopener noreferrer">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" class="bi bi-database-fill"
|
||
viewBox="0 0 16 16">
|
||
<path fill="currentColor"
|
||
d="M3.904 1.777C4.978 1.289 6.427 1 8 1s3.022.289 4.096.777C13.125 2.245 14 2.993 14 4s-.875 1.755-1.904 2.223C11.022 6.711 9.573 7 8 7s-3.022-.289-4.096-.777C2.875 5.755 2 5.007 2 4s.875-1.755 1.904-2.223"/>
|
||
<path fill="currentColor"
|
||
d="M2 6.161V7c0 1.007.875 1.755 1.904 2.223C4.978 9.71 6.427 10 8 10s3.022-.289 4.096-.777C13.125 8.755 14 8.007 14 7v-.839c-.457.432-1.004.751-1.49.972C11.278 7.693 9.682 8 8 8s-3.278-.307-4.51-.867c-.486-.22-1.033-.54-1.49-.972"/>
|
||
<path fill="currentColor"
|
||
d="M2 9.161V10c0 1.007.875 1.755 1.904 2.223C4.978 12.711 6.427 13 8 13s3.022-.289 4.096-.777C13.125 11.755 14 11.007 14 10v-.839c-.457.432-1.004.751-1.49.972-1.232.56-2.828.867-4.51.867s-3.278-.307-4.51-.867c-.486-.22-1.033-.54-1.49-.972"/>
|
||
<path fill="currentColor"
|
||
d="M2 12.161V13c0 1.007.875 1.755 1.904 2.223C4.978 15.711 6.427 16 8 16s3.022-.289 4.096-.777C13.125 14.755 14 14.007 14 13v-.839c-.457.432-1.004.751-1.49.972-1.232.56-2.828.867-4.51.867s-3.278-.307-4.51-.867c-.486-.22-1.033-.54-1.49-.972"/>
|
||
</svg>
|
||
<span>Dataset</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</header>
|
||
|
||
<main>
|
||
<div class="container d-flex flex-column align-items-center pb-5">
|
||
<noscript>
|
||
<p class="text-danger small text-center">Enable JavaScript to play videos.</p>
|
||
</noscript>
|
||
<video controls loop muted src="videos/brickgpt-v2.mp4" class="w-100 h-auto max-w-md"></video>
|
||
</div>
|
||
|
||
<div class="bg-dark text-bg-dark">
|
||
<div class="container py-5">
|
||
<h2 class="text-center mb-3">Overview</h2>
|
||
<p id="overview" class="lead max-w-sm mx-auto mb-5">
|
||
<b class="fw-bolder">BrickGPT</b> generates a toy brick structure from a user-provided text prompt in an
|
||
end-to-end manner. Notably, our generated brick structure is physically stable and buildable.
|
||
</p>
|
||
<a class="pswp-img" href="images-optimized/teaser-full.webp"
|
||
data-pswp-width="2336" data-pswp-height="1120" target="_blank">
|
||
<img srcset="images-optimized/teaser-540.webp 540w,
|
||
images-optimized/teaser-1080.webp 1080w,
|
||
images-optimized/teaser-1320.webp 1320w,
|
||
images-optimized/teaser-2640.webp 2640w"
|
||
sizes="(max-width: 575px) 100vw,
|
||
(max-width: 767px) 540px,
|
||
(max-width: 991px) 720px,
|
||
(max-width: 1199px) 960px,
|
||
(max-width: 1399px) 1140px,
|
||
1320px"
|
||
src="images-optimized/teaser-540.webp" alt="BrickGPT overview" aria-describedby="overview"
|
||
class="img-fluid" width="2336" height="1120"/>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="bg-light text-bg-light">
|
||
<div class="container py-5">
|
||
<h2 class="text-center mb-3">Abstract</h2>
|
||
<p class="max-w-md mx-auto mb-4">
|
||
We introduce <b class="fw-bolder">BrickGPT</b>, the first approach for generating
|
||
physically stable toy brick models from text prompts. To achieve this, we construct a
|
||
large-scale, physically stable dataset of brick designs, along with their associated captions, and train
|
||
an autoregressive large language model to predict the next brick to add via next-token prediction.
|
||
To improve the stability of the resulting designs, we employ an efficient validity check and
|
||
physics-aware rollback during autoregressive inference, which prunes infeasible token
|
||
predictions using physics laws and assembly constraints. Our experiments show that
|
||
<b class="fw-bolder">BrickGPT</b> produces stable, diverse, and aesthetically pleasing
|
||
brick designs that align closely with the input text prompts. We also develop a text-based brick
|
||
texturing method to generate colored and textured designs. We show that our designs can be
|
||
assembled manually by humans and automatically by robotic arms. We also release our new dataset,
|
||
<b class="fw-bolder">StableText2Brick</b>, containing over 47,000 brick structures of
|
||
over 28,000 unique 3D objects accompanied by detailed captions, along with our code and models.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="container py-5">
|
||
<h2 class="text-center fs-3 mb-4">StableText2Brick dataset</h2>
|
||
<figure class="figure">
|
||
<a class="pswp-img" href="images-optimized/dataset-full.webp"
|
||
data-pswp-width="3612" data-pswp-height="1178" target="_blank">
|
||
<img srcset="images-optimized/dataset-540.webp 540w,
|
||
images-optimized/dataset-1080.webp 1080w,
|
||
images-optimized/dataset-1320.webp 1320w,
|
||
images-optimized/dataset-2640.webp 2640w"
|
||
sizes="(max-width: 575px) 100vw,
|
||
(max-width: 767px) 540px,
|
||
(max-width: 991px) 720px,
|
||
(max-width: 1199px) 960px,
|
||
(max-width: 1399px) 1140px,
|
||
1320px"
|
||
src="images-optimized/dataset-540.webp" class="figure-img img-fluid" width="3612" height="1178"
|
||
alt="StableText2Brick dataset construction pipeline"/>
|
||
</a>
|
||
<figcaption class="figure-caption">
|
||
(a) From a ShapeNetCore mesh, we generate a brick structure by voxelizing it onto a 20×20×20 grid,
|
||
then constructing its brick layout with a delete-and-rebuild algorithm. (b) We augment each shape with
|
||
multiple structural variations by randomizing the brick layout while preserving the overall shape. (c)
|
||
Stability analysis is performed on each variation to filter out physically unstable designs. (d) To
|
||
obtain captions for each shape, we render the brick structure from 24 different viewpoints and use
|
||
GPT-4o to generate detailed geometric descriptions. (e) Data samples from 5 categories in our
|
||
<b class="fw-bolder">StableText2Brick</b> dataset.
|
||
</figcaption>
|
||
</figure>
|
||
|
||
<div class="py-4"></div>
|
||
<h2 class="text-center fs-3 mb-4">BrickGPT pipeline</h2>
|
||
<figure class="figure">
|
||
<a class="pswp-img" href="images-optimized/pipeline-full.webp"
|
||
data-pswp-width="3624" data-pswp-height="1610" target="_blank">
|
||
<img srcset="images-optimized/pipeline-540.webp 540w,
|
||
images-optimized/pipeline-1080.webp 1080w,
|
||
images-optimized/pipeline-1320.webp 1320w,
|
||
images-optimized/pipeline-2640.webp 2640w"
|
||
sizes="(max-width: 575px) 100vw,
|
||
(max-width: 767px) 540px,
|
||
(max-width: 991px) 720px,
|
||
(max-width: 1199px) 960px,
|
||
(max-width: 1399px) 1140px,
|
||
1320px"
|
||
src="images-optimized/pipeline-540.webp" class="figure-img img-fluid" width="3624" height="1610"
|
||
alt="BrickGPT pipeline"/>
|
||
</a>
|
||
<figcaption class="figure-caption">
|
||
(a) Our system tokenizes a brick structure into a sequence of text tokens, ordered in a raster-scan
|
||
manner from bottom to top. (b) We create an instruction dataset pairing brick sequences with
|
||
descriptions to fine-tune LLaMA-3.2-Instruct-1B. (c) At inference time,
|
||
<b class="fw-bolder">BrickGPT</b> generates brick structures incrementally by predicting one brick at a
|
||
time given a text prompt. For each generated brick, we perform validity checks to ensure it is
|
||
well-formatted, exists in our brick library, and does not collide with existing bricks. After completing
|
||
the design, we verify its physical stability. If the structure is unstable, we roll back to a stable
|
||
state by removing all unstable bricks and their subsequent ones, and resume generation from that point.
|
||
</figcaption>
|
||
</figure>
|
||
|
||
<div class="py-4"></div>
|
||
<h2 class="text-center fs-3 mb-4">Step-by-step generation of brick structures from text</h2>
|
||
<div class="container-fluid text-center font-cursive">
|
||
<div class="row align-items-start row-cols-2 row-cols-md-3 row-gap-2">
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline data-src="videos/step-by-step/vessel.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“A streamlined vessel with a long, narrow hull”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline data-src="videos/step-by-step/guitar.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“A classical guitar”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline data-src="videos/step-by-step/sofa.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“A basic sofa”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline data-src="videos/step-by-step/bookshelf.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“A bookshelf with horizontal tiers”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline data-src="videos/step-by-step/chair.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“A high-backed chair”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline data-src="videos/step-by-step/bench.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“A backless bench with armrest”</figcaption>
|
||
</figure>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="py-4"></div>
|
||
<h2 class="text-center fs-3 mb-4">Automated assembly of generated brick structures using robots (8x speed)</h2>
|
||
<div class="container-fluid text-center font-cursive">
|
||
<div class="row align-items-start row-cols-2 row-gap-2">
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline data-src="videos/robots/vessel_8x.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“A streamlined vessel with a long, narrow hull […]”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline data-src="videos/robots/guitar_8x.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“An asymmetrical six-string guitar […]”</figcaption>
|
||
</figure>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="py-4"></div>
|
||
<h2 class="text-center fs-3 mb-4">Generated brick structures assembled by humans</h2>
|
||
<a class="pswp-img" href="images-optimized/human_exec-full.webp"
|
||
data-pswp-width="3287" data-pswp-height="3008" target="_blank">
|
||
<img srcset="images-optimized/human_exec-540.webp 540w,
|
||
images-optimized/human_exec-1080.webp 1080w,
|
||
images-optimized/human_exec-1320.webp 1320w,
|
||
images-optimized/human_exec-2640.webp 2640w"
|
||
sizes="(max-width: 575px) 100vw,
|
||
(max-width: 767px) 540px,
|
||
(max-width: 991px) 720px,
|
||
(max-width: 1199px) 960px,
|
||
(max-width: 1399px) 1140px,
|
||
1320px"
|
||
src="images-optimized/human_exec-540.webp" class="img-fluid" width="3287" height="3008"
|
||
alt="Examples of brick structures built in the real world by humans."/>
|
||
</a>
|
||
|
||
<div class="py-4"></div>
|
||
<h2 class="text-center fs-3 mb-4">Generated textured brick models</h2>
|
||
<div class="container-fluid text-center font-cursive">
|
||
<div class="row align-items-start row-cols-2 row-cols-md-4 row-gap-2 mb-2">
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline
|
||
data-src="videos/texture/others/rustic_stone_bench_full_color_rotate.mp4"
|
||
class="img-fluid mb-1"
|
||
type="video/mp4"></video>
|
||
<figcaption>“Rustic stone bench with moss growth […]”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline
|
||
data-src="videos/texture/others/hot_rod_with_full_color_rotate.mp4"
|
||
class="img-fluid mb-1"
|
||
type="video/mp4"></video>
|
||
<figcaption>“Hot rod with flame paintwork […]”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline
|
||
data-src="videos/texture/others/rustic_farmhouse_chair_full_color_rotate.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“Rustic farmhouse chair built from reclaimed wood […]”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline
|
||
data-src="videos/texture/others/live_edge_walnut_full_color_rotate.mp4"
|
||
class="img-fluid mb-1"
|
||
type="video/mp4"></video>
|
||
<figcaption>“Live edge walnut table […]”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline
|
||
data-src="videos/texture/sofa/comfortable_lounge_chair_full_color_rotate.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“Comfortable lounge chair wrapped in Japanese shibori fabric […]”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline
|
||
data-src="videos/texture/sofa/cyberpunk_holographic_material_full_color_rotate.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“Cyberpunk holographic material with neon purple and blue gradients […]”
|
||
</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline
|
||
data-src="videos/texture/sofa/rustic_farmhouse_armchair_full_color_rotate.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“Rustic farmhouse armchair built from reclaimed wood […]”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline
|
||
data-src="videos/texture//sofa/vintage_floral_tapestry_full_color_rotate.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“Vintage floral tapestry with deep reds and golds […]”</figcaption>
|
||
</figure>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="row align-items-start row-cols-3 row-gap-2">
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline
|
||
data-src="videos/texture/bookshelf/gothic_cathedral_bookshelf_full_color_rotate.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“Gothic cathedral bookshelf with arch details, medieval style […]”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline
|
||
data-src="videos/texture/bookshelf/japanese_sliding_bookcase_full_color_rotate.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“Japanese sliding bookcase with shoji screens, traditional design […]”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline
|
||
data-src="videos/texture/bookshelf/victorian_library_shelving_full_color_rotate.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“Victorian library shelving with carved moldings […]”</figcaption>
|
||
</figure>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="py-4"></div>
|
||
<h2 class="text-center fs-3 mb-4">Generated colored brick models</h2>
|
||
<div class="container-fluid text-center font-cursive">
|
||
<div class="row align-items-start row-cols-2 row-cols-md-4 row-gap-2">
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline data-src="videos/color/guitar/guitar_rotate.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“Parlor guitar with ladder bracing […]”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline data-src="videos/color/guitar/purple_rotate.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“Electric guitar in metallic purple […]”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline data-src="videos/color/guitar/steel_rotate.mp4"
|
||
class="img-fluid mb-1" type="video/mp4"></video>
|
||
<figcaption>“Steel resonator with engraved body […]”</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="col">
|
||
<figure>
|
||
<video autoplay controls loop muted playsinline
|
||
data-src="videos/color/guitar/sunburst_rotate.mp4" class="img-fluid mb-1"
|
||
type="video/mp4"></video>
|
||
<figcaption>“Sunburst Les Paul with amber finish […]”</figcaption>
|
||
</figure>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</main>
|
||
|
||
<footer class="bg-light text-bg-light">
|
||
<div class="container py-5">
|
||
<h2 class="fs-4 mb-3">Citation</h2>
|
||
<pre><code class="small">@inproceedings{pun2025brickgpt,
|
||
title = {Generating Physically Stable and Buildable Brick Structures from Text},
|
||
author = {Pun, Ava and Deng, Kangle and Liu, Ruixuan and Ramanan, Deva and Liu, Changliu and Zhu, Jun-Yan},
|
||
booktitle = {ICCV},
|
||
year = {2025}
|
||
}</code></pre>
|
||
|
||
<h2 class="fs-4 mb-3 mt-5">Acknowledgements</h2>
|
||
<p class="small">
|
||
We thank Minchen Li, Ken Goldberg, Nupur Kumari, Ruihan Gao, and Yihao Shi for their discussions
|
||
and help. We also thank Jiaoyang Li, Philip Huang, and Shobhit Aggarwal for developing the bimanual
|
||
robotic system. This work is partly supported by the Packard Foundation, Cisco Research Grant,
|
||
and Amazon Faculty Award. This work is also in part supported by the Manufacturing Futures
|
||
Institute, Carnegie Mellon University, through a grant from the Richard King Mellon Foundation. KD is
|
||
supported by the Microsoft Research PhD Fellowship. The website template is taken from
|
||
<a href="https://www.cs.cmu.edu/~custom-diffusion/" class="fw-bolder link-body-emphasis" target="_blank"
|
||
rel="external noopener noreferrer">Custom Diffusion</a>
|
||
(which was built on
|
||
<a href="https://dreamfusion3d.github.io/index.html" class="fw-bolder link-body-emphasis" target="_blank"
|
||
rel="external noopener noreferrer">DreamFusion</a>’s
|
||
project page).
|
||
</p>
|
||
</div>
|
||
</footer>
|
||
|
||
<script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload@12.2.0/dist/lazyload.min.js"></script>
|
||
<script>
|
||
// LazyLoad
|
||
const lazyLoadInstance = new LazyLoad({
|
||
elements_selector: "video",
|
||
use_native: true,
|
||
});
|
||
</script>
|
||
<script type="module">
|
||
// PhotoSwipe
|
||
import PhotoSwipeLightbox from "https://cdn.jsdelivr.net/npm/photoswipe@5.4.4/dist/photoswipe-lightbox.esm.min.js";
|
||
|
||
const lightbox = new PhotoSwipeLightbox({
|
||
gallery: "#pswp-gallery",
|
||
children: "a.pswp-img",
|
||
pswpModule: () => import("https://cdn.jsdelivr.net/npm/photoswipe@5.4.4/+esm"),
|
||
});
|
||
lightbox.init();
|
||
</script>
|
||
</body>
|
||
|
||
</html>
|