# 🛠️ 安装
## 前置条件
* **Python**: >=3.10,<3.14
* **操作系统**: Linux (*推荐*) / MacOS / Windows
:::{note}
Genesis 设计为***跨平台***,支持的后端设备包括*CPU*、*CUDA GPU*和*非 CUDA GPU*。也就是说,建议使用**Linux**平台和**CUDA 兼容 GPU**以获得最佳性能。
:::
各系统支持的功能如下:
| 操作系统 | GPU 设备 | GPU 仿真 | CPU 仿真 | 交互式查看器 | 无头渲染 |
| ------- | ----------------- | -------------- | -------------- | ---------------- | ------------------ |
| Linux | Nvidia | ✅ | ✅ | ✅ | ✅ |
| | AMD | ✅ | ✅ | ✅ | ✅ |
| | Intel | ✅ | ✅ | ✅ | ✅ |
| Windows | Nvidia | ✅ | ✅ | ✅ | ✅ |
| | AMD | ✅ | ✅ | ✅ | ✅ |
| | Intel | ✅ | ✅ | ✅ | ✅ |
| MacOS | Apple Silicon | ✅ | ✅ | ✅ | ✅ |
## 安装步骤
1. 按照[官方指南](https://pytorch.org/get-started/locally/)安装 **PyTorch**。
2. 通过 PyPI 安装 Genesis:
```bash
pip install genesis-world
```
:::{note}
如果您在 CUDA 环境下使用 Genesis,请确保您的机器上安装了适当的 nvidia 驱动程序。
:::
## (可选)表面重建
如果您需要为基于粒子的实体(流体、可变形体等)可视化提供精美的视觉效果,通常需要使用基于粒子的内部表示来重建网格表面。为此,我们开箱即用地支持 [splashsurf](https://github.com/InteractiveComputerGraphics/splashsurf),这是一种最先进的表面重建工具。或者,我们也提供了 `ParticleMesher`,这是我们自己的基于 openVDB 的表面重建工具,速度更快但质量较低:
```bash
echo "export LD_LIBRARY_PATH=${PWD}/ext/ParticleMesher/ParticleMesherPy:$LD_LIBRARY_PATH" >> ~/.bashrc
source ~/.bashrc
```
## (可选)光线追踪渲染器
如果您需要照片级真实感的视觉效果,Genesis 内置了一个基于光线追踪(路径追踪)的渲染器,使用 [LuisaCompute](https://github.com/LuisaGroup/LuisaCompute) 开发,这是一种为渲染设计的高性能领域特定语言。有关设置,请参见[可视化与渲染](../getting_started/visualization.md)。
## (可选)USD 资产
如果您需要将 USD 资产加载到 Genesis 场景中,请参见 [USD 导入设置](../getting_started/usd_import.md#installation)获取安装说明。
## 故障排除
### 导入错误
#### 'Genesis hasn't been initialized'
Genesis 未初始化时,尝试导入任何引擎相关子模块将引发异常,例如:
```python
Traceback (most recent call last):
File "/home/jeremy/Downloads/Genesis_Jeremy/examples/./init_error.py", line 3, in
from genesis.engine.entities import RigidEntity
File "/home/jeremy/.pyenv/versions/spider-genesis/lib/python3.11/site-packages/genesis/engine/entities/rigid_entity/rigid_entity.py", line 14, in
from genesis.utils import array_class
File "/home/jeremy/.pyenv/versions/spider-genesis/lib/python3.11/site-packages/genesis/utils/array_class.py", line 13, in
gs.raise_exception("Genesis hasn't been initialized. Did you call `gs.init()`?")
File "/home/jeremy/.pyenv/versions/spider-genesis/lib/python3.11/site-packages/genesis/utils/misc.py", line 42, in raise_exception
raise gs.GenesisException(msg)
genesis.GenesisException: Genesis hasn't been initialized. Did you call `gs.init()`?
```
这个错误虽然是 bug 但是预期的行为。任何引擎相关的子模块必须在初始化 Genesis 之后导入,以便有机会配置低级的 GsTaichi 功能,如快速缓存机制或 Gstaichi 动态数组模式。在实践中,这个限制不应该成为任何人的障碍,因为引擎相关的类不意味着手动实例化。不过,为了类型检查而导入它们可能是方便的。如果是这样,只需使用类型检查保护,例如:
```python
from typing import TYPE_CHECKING
import genesis as gs
if TYPE_CHECKING:
from genesis.engine.entities.drone_entity import DroneEntity
```
#### 循环导入错误
如果当前目录是 Genesis 的源目录,Python 将无法(循环)导入 Genesis。这可能是由于 Genesis 在未启用可编辑模式的情况下安装的,无论是从 PyPI 包索引还是从源代码安装。明显的解决方法是在运行 Python 之前移出 Genesis 的源目录。长期的解决方案是简单地切换到可编辑安装模式:首先卸载 Python 包 `genesis-world`,然后在 Genesis 的源目录中运行 `pip install -e '.[render]'`。
### [原生 Ubuntu] 渲染缓慢(CPU 即软件回退)
有时,在 Genesis 中使用 `cam.render()` 或查看器相关功能时,渲染会变得非常缓慢。这**不是 Genesis 的问题**。Genesis 依赖 PyRender 和 EGL 进行基于 GPU 的离屏渲染。如果您的系统未正确配置以使用 `libnvidia-egl`,它可能会**静默回退到 MESA(CPU)渲染**,严重影响性能。
即使 GPU 看起来可以访问,您的系统仍可能默认使用 CPU 渲染,除非明确配置。
---
#### ✅ 确保 GPU 渲染处于活动状态
1. **安装 NVIDIA GL 库**
```bash
sudo apt update && sudo apt install -y libnvidia-gl-525
```
2. **检查 EGL 是否指向 NVIDIA 驱动**
```bash
ldconfig -p | grep EGL
```
您应该 ideally 看到:
```
libEGL_nvidia.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libEGL_nvidia.so.0
```
⚠️ 您*可能也会看到*:
```
libEGL_mesa.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libEGL_mesa.so.0
```
这并不总是问题——**某些系统可以同时处理两者**。
但如果您遇到**渲染缓慢**,通常最好移除 Mesa。
3. **(可选但推荐)** 移除 MESA 以防止回退:
```bash
sudo apt remove -y libegl-mesa0 libegl1-mesa libglx-mesa0
```
然后重新检查:
```bash
ldconfig -p | grep EGL
```
✅ 您现在应该只能看到 `libEGL_nvidia.so.0`。
4. **(可选 – 针对边缘情况)** 检查 NVIDIA EGL ICD 配置文件是否存在
在大多数情况下,如果正确安装了 NVIDIA 驱动程序,此文件应该已经存在。但是,在某些最小化或容器化环境(例如无头 Docker 镜像)中,如果 EGL 初始化失败,您可能需要手动创建它:
```bash
cat /usr/share/glvnd/egl_vendor.d/10_nvidia.json
```
应包含:
```json
{
"file_format_version" : "1.0.0",
"ICD" : {
"library_path" : "libEGL_nvidia.so.0"
}
}
```
如果没有,请创建它:
```bash
bash -c 'cat > /usr/share/glvnd/egl_vendor.d/10_nvidia.json <