| name | generate-world | |||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| description | Drive `geniesim_world` to produce a photorealistic, explorable 3D world from a single equirectangular panorama — uses the `geniesim_world create` CLI (Click subcommand), pairs SHARP + DA360 to fuse panorama RGB with metric depth, and optionally upscales with Real-ESRGAN. Trigger: When the user asks to "generate a world", "生成 3D 世界", "pano to 3D", "PanoRecon", "make a scene from a photo", "create a world from a panorama", or references `geniesim_world` / a `.png` panorama input. | |||||||||||||||||||||||||||||||||||||||||
| license | MPL-2.0 | |||||||||||||||||||||||||||||||||||||||||
| metadata |
|
|||||||||||||||||||||||||||||||||||||||||
| prerequisites | ||||||||||||||||||||||||||||||||||||||||||
| inputs |
|
|||||||||||||||||||||||||||||||||||||||||
| outputs |
|
- User has an equirectangular panorama (2:1 aspect, e.g.
4096×2048) and wants a 3D world (Gaussian splat / depth map / fused cubes) out of it. - User wants to seed a Genie Sim scene with a generated environment rather than a hand-authored USD.
- Researcher reproducing the PanoRecon paper (arXiv 2604.07105).
Do not use for:
- USD scene authoring without a panorama input → that's the
generate-sceneskill ingeniesim_generator. - Asset / object library search →
search-assetsingeniesim_generator. - Importing an existing USD scene into the RT Engine → just point
the scene yaml's
scene_usdaat the existing USD (seeadd-robot/launch-scene). This skill is not the path for that —geniesim_worldproduces.ply/.gspGaussians today, and loading them into ascene_*.yamlis 🚧 W.I.P.
- Out-of-band install.
geniesim_worldis not pulled in bygeniesim bootstrap— it lives behind heavy CUDA deps (PyTorch + ml-sharp + DA360 + optional Real-ESRGAN). Install in its own conda env, separate from the rest of the stack. - Three external dependencies, not on pip. Need
external/ml-sharp/,external/DA360/(with checkpoint), and optionallyexternal/realesrgan-ncnn-vulkan-…/. Theexternal/tree sits next togeniesim_world/undersource/. - DA360 checkpoint is mandatory. Either drop it at
external/DA360/DA360_large.pth, pass--da360-checkpoint, or setGENIESIM_DA360_CHECKPOINT. Without it, depth prediction fails immediately. - Tested on RTX 5090 / CUDA 12.8. Other GPUs work but need a
matching
requirements-cu<XX>.txt. Don't paste the cu128 line verbatim onto a cu118 box. - Real-ESRGAN is optional. It improves visual fidelity but introduces synthetic texture — disable for tasks where ground-truth pixel statistics matter.
source/
├── geniesim_world/ # this project
└── external/
├── ml-sharp/ # git clone https://github.com/apple/ml-sharp.git
├── DA360/ # git clone https://github.com/DepthAnything/DA360.git
│ └── DA360_large.pth # checkpoint (download separately)
└── realesrgan-ncnn-vulkan-20220424-ubuntu/ # optional, super-sample binary
└── realesrgan-ncnn-vulkan
If any external is missing, run the clone / download from the
geniesim_world/README.md § "Prepare Dependencies".
conda create -n geniesim_world python=3.11 -y
conda activate geniesim_world
pip install --upgrade "pip==24.0" "setuptools==69.5.1" "wheel==0.43.0"
cd source/geniesim_world
pip install --extra-index-url https://download.pytorch.org/whl/cu128 -r requirements-cu128.txt
pip install --extra-index-url https://download.pytorch.org/whl/cu128 -e .Verify:
geniesim_world --help # Click group
geniesim_world create --help # subcommand surfacegeniesim_world create \
--panorama path/to/scene_pano.png \
--work-dir runs/$(date +%Y%m%d_%H%M%S) \
--device cuda:0Optional knobs:
| Flag | Effect |
|---|---|
--da360-checkpoint <path> |
Override checkpoint path |
--da360-root <dir> |
Override DA360 repo root |
--checkpoint-path <path> |
SHARP checkpoint override |
--depth-max <float> |
Clip predicted depth at N metres |
--no-depth-gt-init |
Stock SHARP (ignore depth_gt override) |
--super-sample |
Run Real-ESRGAN before fusing (needs the optional binary) |
Typical artifacts under runs/<stamp>/:
runs/<stamp>/
├── pano_input.png # the panorama (copied for provenance)
├── depth/ # per-cube depth maps (EXR or PNG)
├── cubes/ # cubemap faces fused from pano + depth
└── world.gsp / world.ply / … # exported world (format depends on flags)
Loading the generated world into the RT Engine via a scene_*.yaml
is not yet supported. The current contract is that
geniesim_world produces .ply / .gsp Gaussians (plus per-face
EXR depth + cubemap RGB); downstream consumption is via the package's
own debug tooling (geniesim_world debug) and external viewers, not
the RT Engine launcher. The RT-Engine load path is planned — track
the Roadmap & Updates section in the root README.
# Once-off setup
conda create -n geniesim_world python=3.11 -y && conda activate geniesim_world
cd source/geniesim_world
pip install --extra-index-url https://download.pytorch.org/whl/cu128 \
-r requirements-cu128.txt
pip install --extra-index-url https://download.pytorch.org/whl/cu128 -e .
# Generate
geniesim_world create \
--panorama path/to/scene_pano.png \
--work-dir runs/demo \
--device cuda:0- The CLI is a Click group:
geniesim_worldexposes subcommands, withcreatebeing the primary one. Rungeniesim_world --helpfor the full list. - "Generate from text" and "Generate from sparse images" are flagged
COMING SOON in
geniesim_world/README.md— don't promise them in the workflow. - The env is intentionally isolated from the rest of the stack so
pip installhere can't break a workinggeniesim_rosshell. - For sim-to-real research, the generated world's depth statistics
are more reliable without
--super-sample(Real-ESRGAN introduces hallucinated texture).
- CLI source: source/geniesim_world/src/geniesim_world/cli_pano.py
- README: source/geniesim_world/README.md
- AGENTS.md: source/geniesim_world/AGENTS.md
- Paper: https://arxiv.org/abs/2604.07105
- External deps:
apple/ml-sharp,DepthAnything/DA360, optionalxinntao/Real-ESRGAN