Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
45dd040
[MISC] Release 0.3.3. (#1668)
duburcqa Sep 1, 2025
09ebf16
[BUG FIX] Fix support of 'pyglet<2.0'. (#1670)
Kashu7100 Sep 2, 2025
f6f0e28
[MISC] Vision-based manipulation using batch render and two-stage pol…
yun-long Sep 2, 2025
75e0e37
[FEATURE] Refactor 'FrameImageExporter' to improve perf and support n…
duburcqa Sep 2, 2025
3110539
[MISC] Update Dockerfile to Use Non-root user (#1393)
alnI3S Sep 2, 2025
0800fd0
[MISC] reduce max_collision_pairs to save memory (#1672)
YilingQiao Sep 3, 2025
c5d82dd
[FEATURE] Batched AABB (#1658)
LeonLiu4 Sep 3, 2025
6bd4e6b
[FEATURE] Add support of batched camera. (#1675)
duburcqa Sep 3, 2025
5a8928a
[BUG FIX] Fix data races in getting contact and equality constraints …
YilingQiao Sep 3, 2025
e701f6c
[BUG FIX] Lower constraint_timeconst in keyboard_teleop to mitigate p…
sungwu Sep 3, 2025
f3ba941
[FEATURE] Add New Features for Madrona Batch Rendering (#1563)
ACMLCZH Sep 4, 2025
4f81505
[BUG FIX, CHANGING] More sensible defaults for camera far, near. Fix …
duburcqa Sep 4, 2025
9c4e3ad
[MISC] Various minor improvements. (#1681)
duburcqa Sep 4, 2025
6d34872
[FEATURE] Migrate jacobian to not attempt to use global dataclasses (…
hughperkins Sep 4, 2025
4dacc82
[MISC] Add test of num envs versus recompilation (#1655)
hughperkins Sep 4, 2025
fc5230b
[BUG FIX] Resolve bugs for ndarray. (#1683)
YilingQiao Sep 4, 2025
2afc05c
[BUG FIX] Fix 'ti_to_torch' broken after taichi runtime restart. (#1689)
duburcqa Sep 5, 2025
6081bd0
[FEATURE] Continue migrating jacobian to work with ndarray. Part 2 (#…
hughperkins Sep 5, 2025
e373ab9
[MISC] Migrate more rigid body classes to support ndarray. (#1690)
duburcqa Sep 5, 2025
eb2b79a
[BUG FIX] MPM minor fix (#1692)
YilingQiao Sep 5, 2025
e1dab14
[FEATURE] Continue migrating jacobian to work with ndarray. Part 3 (#…
SonSang Sep 6, 2025
891dd94
[MISC] Fix running unit tests for ndarrays. (#1695)
duburcqa Sep 6, 2025
9d08dbf
add ipc option in fem solver
YilingQiao Sep 8, 2025
e15266b
support rendering deformable body for batched env
YilingQiao Sep 8, 2025
8252c8f
minor
YilingQiao Sep 8, 2025
7409788
minor
YilingQiao Sep 8, 2025
c200dcd
before batch rendering
YilingQiao Sep 8, 2025
fe9c467
Merge branch 'yiling/250908_support_deformable_body_multi_env_viewer'…
YilingQiao Sep 8, 2025
1aadf9b
integrate ipc multi env render
YilingQiao Sep 8, 2025
2d96fa3
example
YilingQiao Sep 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/workflows/generic.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,29 @@ concurrency:

jobs:
generic-cpu:
name: ${{ matrix.OS }}-${{ matrix.PYTHON_VERSION }}-${{ matrix.GS_USE_NDARRAY == '1' && 'ndarray' || 'field' }}

strategy:
fail-fast: false
matrix:
# See official Github documentation for details: https://shorturl.at/NJgsj
OS: ["ubuntu-22.04", "ubuntu-24.04", "macos-15"]
PYTHON_VERSION: ["3.10", "3.11", "3.12", "3.13"]
GS_USE_NDARRAY: ["0"]
include:
- OS: "windows-cpu-4-core"
PYTHON_VERSION: "3.12"
GS_USE_NDARRAY: "0"
- OS: "ubuntu-24.04"
PYTHON_VERSION: "3.12"
GS_USE_NDARRAY: "1"

env:
HF_HUB_DOWNLOAD_TIMEOUT: 60
FORCE_COLOR: 1
PY_COLORS: 1
GS_CACHE_FILE_PATH: ".cache/genesis"
GS_USE_NDARRAY: ${{ matrix.GS_USE_NDARRAY }}
TI_OFFLINE_CACHE: "1"
TI_OFFLINE_CACHE_CLEANING_POLICY: "never"
TI_OFFLINE_CACHE_FILE_PATH: ".cache/taichi"
Expand Down
12 changes: 2 additions & 10 deletions .github/workflows/production.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,6 @@ jobs:

mkdir -p "${HOME}/.cache"

# Prefer idle nodes if any
IDLE_NODES=$(sinfo -h -o "%N %t" | awk '$2 == "idle" {print $1}')
if [[ -n "$IDLE_NODES" ]]; then
NODELIST="--nodelist=$IDLE_NODES"
fi

# TODO: USD baking does not currently support Python 3.11 since
# NVIDIA does not currently release `omniverse-kit==107.3` on PyPI.
# See: https://github.com/Genesis-Embodied-AI/Genesis/pull/1300
Expand All @@ -61,10 +55,8 @@ jobs:
"${{ github.workspace }}":/root/workspace,\
"${HOME}/.cache":/root/.cache \
--no-container-mount-home --container-workdir=/root/workspace \
--export=\
HF_TOKEN="${HF_TOKEN}",\
NVIDIA_DRIVER_CAPABILITIES=all \
--partition=hpc-mid ${NODELIST} --nodes=1 --time="${TIMEOUT_MINUTES}" \
--export=NVIDIA_DRIVER_CAPABILITIES=all,HF_TOKEN \
--partition=hpc-mid --exclusive --nodes=1 --time="${TIMEOUT_MINUTES}" \
--job-name=${SLURM_JOB_NAME} \
bash -c "
pip install --extra-index-url https://pypi.nvidia.com/ omniverse-kit && \
Expand Down
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,10 +109,11 @@ xhost +local:root # Allow the container to access the display

docker run --gpus all --rm -it \
-e DISPLAY=$DISPLAY \
-e LOCAL_USER_ID="$(id -u)" \
-v /dev/dri:/dev/dri \
-v /tmp/.X11-unix/:/tmp/.X11-unix \
-v $PWD:/workspace \
genesis
-v $(pwd):/workspace \
--name genesis genesis:latest
```

### AMD users
Expand Down
5 changes: 3 additions & 2 deletions README_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,11 @@ xhost +local:root # 允许容器访问显示设备

docker run --gpus all --rm -it \
-e DISPLAY=$DISPLAY \
-e LOCAL_USER_ID="$(id -u)" \
-v /dev/dri:/dev/dri \
-v /tmp/.X11-unix/:/tmp/.X11-unix \
-v $PWD:/workspace \
genesis
-v $(pwd):/workspace \
--name genesis genesis:latest
```

### AMD 用户
Expand Down
5 changes: 3 additions & 2 deletions README_FR.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,10 +109,11 @@ xhost +local:root # Autoriser le conteneur à accéder à l'affichage

docker run --gpus all --rm -it \
-e DISPLAY=$DISPLAY \
-e LOCAL_USER_ID="$(id -u)" \
-v /dev/dri:/dev/dri \
-v /tmp/.X11-unix/:/tmp/.X11-unix \
-v $PWD:/workspace \
genesis
-v $(pwd):/workspace \
--name genesis genesis:latest
```

### Utilisateurs AMD
Expand Down
5 changes: 3 additions & 2 deletions README_JA.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,10 +109,11 @@ xhost +local:root # コンテナがディスプレイにアクセスすること

docker run --gpus all --rm -it \
-e DISPLAY=$DISPLAY \
-e LOCAL_USER_ID="$(id -u)" \
-v /dev/dri:/dev/dri \
-v /tmp/.X11-unix/:/tmp/.X11-unix \
-v $PWD:/workspace \
genesis
-v $(pwd):/workspace \
--name genesis genesis:latest
```

### AMDユーザー
Expand Down
5 changes: 3 additions & 2 deletions README_KR.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,10 +109,11 @@ xhost +local:root # 컨테이너가 디스플레이에 접근하도록 허용

docker run --gpus all --rm -it \
-e DISPLAY=$DISPLAY \
-e LOCAL_USER_ID="$(id -u)" \
-v /dev/dri:/dev/dri \
-v /tmp/.X11-unix/:/tmp/.X11-unix \
-v $PWD:/workspace \
genesis
-v $(pwd):/workspace \
--name genesis genesis:latest
```

### AMD 사용자
Expand Down
15 changes: 15 additions & 0 deletions RELEASE.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
# Genesis Release Note

## 0.3.3

This minor release fixes a few non-blocking rendering issues for the Rasterizer backend.

### Bug Fixes

* [BUG FIX] Fix shadow map not properly rendered for objects far away from floor plane. (@duburcqa) (#1664)
* [BUG FIX] Fix genesis import failure if tkinter is failing at init on MacOS. (@duburcqa) (#1666)
* [BUG FIX] Fix default visualization mode for emitter surface. (@duburcqa) (#1665)

### Miscellaneous

* [MISC] Expose parameters for ground plane tiling. (@yuhongyi) (#1657)
* [MISC] Add support of 'ti.ndarray' to 'ti_field_to_torch' and rename in 'ti_to_torch'. (@duburcqa) (#1661)

## 0.3.2

This minor release fixes a few additional regressions and initiates migration to our own open-source fork of Taichi, [GsTaichi](https://github.com/Genesis-Embodied-AI/gstaichi) (contributions are welcome!).
Expand Down
23 changes: 19 additions & 4 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ RUN apt-get update && apt-get install -y --no-install-recommends \

WORKDIR /workspace

# ------------------------ No root user --------------------------
RUN useradd --shell /bin/bash -u 1001 -c "" -m user

# --------------------------- Genesis ----------------------------
RUN pip install --no-cache-dir open3d
RUN git clone https://github.com/Genesis-Embodied-AI/Genesis.git && \
Expand All @@ -101,12 +104,24 @@ ENV LD_LIBRARY_PATH=/opt/conda/lib/python3.11/site-packages/genesis/ext/Particle
# Copy LuisaRender build artifacts from the builder stage
COPY --from=builder /workspace/Genesis/genesis/ext/LuisaRender/build/bin /opt/conda/lib/python3.11/site-packages/genesis/ext/LuisaRender/build/bin
# fix GLIBCXX_3.4.30 not found
RUN cd /opt/conda/lib && \
mv libstdc++.so.6 libstdc++.so.6.old && \
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++.so.6
# Remove this — it's dangerous and broke cmake
# RUN cd /opt/conda/lib && \
# mv libstdc++.so.6 libstdc++.so.6.old && \
# ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++.so.6
ENV LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

COPY 10_nvidia.json /usr/share/glvnd/egl_vendor.d/10_nvidia.json
COPY nvidia_icd.json /usr/share/vulkan/icd.d/nvidia_icd.json
COPY nvidia_layers.json /etc/vulkan/implicit_layer.d/nvidia_layers.json

ENTRYPOINT ["/bin/bash"]
# ---------------------- Custom Entrypoint -----------------------
RUN echo '#!/bin/bash\n\
if [ -n "${LOCAL_USER_ID}" ]; then\n\
echo "Starting with UID: $LOCAL_USER_ID"\n\
usermod -u $LOCAL_USER_ID user\n\
chown -R user:user /opt/conda/lib/python3.11/site-packages/genesis/ext/LuisaRender/\n\
fi\n\
exec /bin/bash' > /entrypoint.sh && \
chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
62 changes: 45 additions & 17 deletions examples/IPC_Solver/LibUIPC_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
import argparse
from tqdm import tqdm
from batch_scene import PhysOptim
SCENE_POS = (0.5, 0.5, 1.0)

SCENE_POS = (0.5, 0.5, 0.30)


def main():
Expand All @@ -16,7 +17,7 @@ def main():
parser.add_argument(
"--substeps", type=int, help="Number of substeps (auto-selected based on solver if not specified)"
)
#parser.add_argument("--vis", "-v", action="store_true", help="Show visualization GUI")
# parser.add_argument("--vis", "-v", action="store_true", help="Show visualization GUI")

args = parser.parse_args()

Expand All @@ -41,34 +42,61 @@ def main():
profiling_options=gs.options.ProfilingOptions(
show_FPS=False,
),
show_viewer=True,
# renderer=gs.renderers.RayTracer( # type: ignore
# env_surface=gs.surfaces.Emission(
# emissive_texture=gs.textures.ImageTexture(
# image_path="textures/indoor_bright.png",
# ),
# ),
# env_radius=15.0,
# env_euler=(0, 0, 180),
# lights=[
# {"pos": (0.0, 0.0, 10.0), "radius": 3.0, "color": (15.0, 15.0, 15.0)},
# ],
# ),
show_viewer=False,
)

scene.add_entity(gs.morphs.Plane())

blob = scene.add_entity(
morph=gs.morphs.Sphere(pos=tuple(map(sum, zip(SCENE_POS, (-0., -0., 0.3)))), radius=0.1),
morph=gs.morphs.Sphere(pos=tuple(map(sum, zip(SCENE_POS, (-0.0, -0.0, 0.3)))), radius=0.1),
material=gs.materials.FEM.Elastic(E=1.0e4, nu=0.45, rho=1000.0, model="stable_neohookean"),
surface=gs.surfaces.Plastic(color=(0.8, 0.2, 0.2, 0.5)),
)

cube = scene.add_entity(
morph=gs.morphs.Box(pos=tuple(map(sum, zip(SCENE_POS, (0., 0., 0)))), size=(0.2, 0.2, 0.2)),
morph=gs.morphs.Box(pos=tuple(map(sum, zip(SCENE_POS, (0.0, 0.0, 0)))), size=(0.2, 0.2, 0.2)),
material=gs.materials.FEM.Elastic(E=1.0e6, nu=0.45, rho=1000.0, model="stable_neohookean"),
surface=gs.surfaces.Plastic(color=(0.2, 0.8, 0.2, 0.5)),
)

import polyscope as ps

# ps.init()
# ps.set_window_size(1600, 1280)

mesh_trimesh_dict = {}
mesh_trimesh_dict["cube"] = [cube.init_positions.numpy(), cube.elems]
mesh_trimesh_dict["blob"] = [blob.init_positions.numpy(), blob.elems]
ipc_sim = PhysOptim(mesh_trimesh_dict, optim_num=0, visualize=True)
scene.build()

def on_update():
new_state = ipc_sim.step()
print(new_state["tet_0"]["positions"].shape)
if "tet_0" in new_state:
cube.set_pos(0, new_state["tet_0"]["positions"][None])
if "tet_1" in new_state:
blob.set_pos(0, new_state["tet_1"]["positions"][None])
# scene._t += 1
# scene._visualizer.update(force=True, auto=True)

#print(cube.elems)
#print(cube.init_positions.numpy())
useGenesis = False
if useGenesis:
scene.build()
for step in range(50000):
scene.step()
else:
mesh_trimesh_dict = {}
mesh_trimesh_dict['cube'] = [cube.init_positions.numpy(), cube.elems]
mesh_trimesh_dict['blob'] = [blob.init_positions.numpy(), blob.elems]
PhysOptim(mesh_trimesh_dict, 0)
for i in range(100):
on_update()
print(f"Step {i}")
# ps.set_user_callback(on_update)
# ps.show()


if __name__ == "__main__":
Expand Down
Loading