# 🛠️ インストール方法
## 前提条件
* **Python**: 3.9以上
* **OS**: Linux (*推奨*) / MacOS / Windows
:::{note}
Genesisは***マルチプラットフォーム***に対応しており、*CPU*、*CUDA対応のGPU*、および*非CUDA GPU*を含むバックエンドデバイスをサポートしています。ただし、ベストな性能を得るためには、**Linux**プラットフォームと**CUDA対応GPU**の使用を推奨します。
:::
各システムでサポートされる機能は以下の通りです:
| OS | GPUデバイス | GPUシミュレーション | CPUシミュレーション | インタラクティブビューア | ヘッドレスレンダリング |
| ------- | ----------------- | ---------------- | ---------------- | -------------------- | ------------------ |
| Linux | Nvidia | ✅ | ✅ | ✅ | ✅ |
| | AMD | ✅ | ✅ | ✅ | ✅ |
| | Intel | ✅ | ✅ | ✅ | ✅ |
| Windows | Nvidia | ✅ | ✅ | ❌ | ❌ |
| | AMD | ✅ | ✅ | ❌ | ❌ |
| | Intel | ✅ | ✅ | ❌ | ❌ |
| MacOS | Apple Silicon | ✅ | ✅ | ✅ | ✅ |
## インストール方法
1. **PyTorch**を[公式手順](https://pytorch.org/get-started/locally/)に従ってインストールしてください。
2. GenesisはPyPI経由で利用可能です:
```bash
pip install genesis-world
```
:::{note}
GenesisをCUDAから利用される場合は適切なnvidia-driverがインストールされているかご確認ください。
:::
## (オプション) モーションプランニング
GenesisはOMPLのモーションプランニング機能を統合しており、直感的なAPIを使用して簡単にモーションプランニングを実施できます。組み込みのモーションプランニング機能が必要な場合は、[ここ](https://github.com/ompl/ompl/releases/tag/prerelease)から事前コンパイル済みのOMPLのWheelをダウンロードし、`pip install`でインストールしてください。
## (オプション) サーフェス再構築
粒子ベースのエンティティ(流体、変形体など)を視覚化するためのメッシュ表面を再構築する必要がある場合、以下の2つのオプションをご用意しています:
1. [splashsurf](https://github.com/InteractiveComputerGraphics/splashsurf):
最先端のサーフェス再構築法を使用して視覚化を実現します。
```bash
cargo install splashsurf
```
2. 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)を使用したレイトレーシング(パストレーシング)ベースのレンダラーが組み込まれています。
### 1. LuisaRenderを取得
LuisaRenderは`ext/LuisaRender`サブモジュール内にあります:
```
git submodule update --init --recursive
```
### 2. 依存関係
#### 2.A: 管理者権限がある場合(推奨)
**注意**: コンパイルはUbuntu 20.04以降でのみ動作するようです。Vulkan 1.2+が必要であり、18.04は1.1までしかサポートしていませんが、完全には確認していません。
- `g++` と `gcc` のバージョンを11にアップグレード
```bash
sudo apt install build-essential manpages-dev software-properties-common
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update && sudo apt install gcc-11 g++-11
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 110
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110
# バージョン確認
g++ --version
gcc --version
```
- cmakeをインストール
```bash
# システムのcmakeバージョンが3.18未満の場合、卸してsnap経由で再インストール
sudo snap install cmake --classic
```
- CUDAをインストール:システム全体で使用するCUDA(バージョン12.0以上):
- https://developer.nvidia.com/cuda-12-1-0-download-archive からダウンロード
- CUDAツールキットをインストール
- 再起動
```bash
# バージョン確認
nvcc --version
```
- rustをインストール
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
sudo apt-get install patchelf
# 上記でエラーが発生する場合、curlがaptからインストールされていることを確認
```
- Vulkanをインストール
```bash
sudo apt install libvulkan-dev
```
- zlibをインストール
```bash
sudo apt-get install zlib1g-dev
```
- RandRヘッダーをインストール
```bash
sudo apt-get install xorg-dev libglu1-mesa-dev
```
- pybindをインストール
```bash
pip install "pybind11[global]"
```
- libsnappyをインストール
```bash
sudo apt-get install libsnappy-dev
```
#### 2.B: 管理者権限がない場合
- conda依存関係をインストール
```bash
conda install -c conda-forge gcc=11.4 gxx=11.4 cmake=3.26.1 minizip zlib libuuid patchelf vulkan-tools vulkan-headers
```
- rustをインストール
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
- pybindをインストール
```bash
pip install "pybind11[global]"
```
### 3. コンパイル
- LuisaRenderとそのPythonバインディングをビルドする:
- システム依存関係を使用した場合(2.A)
```bash
cd genesis/ext/LuisaRender
cmake -S . -B build -D CMAKE_BUILD_TYPE=Release -D PYTHON_VERSIONS=3.9 -D LUISA_COMPUTE_DOWNLOAD_NVCOMP=ON -D LUISA_COMPUTE_ENABLE_GUI=OFF
cmake --build build -j $(nproc)
```
デフォルトではOptiXデノイザを使用しています。OIDNが必要な場合、`-D LUISA_COMPUTE_DOWNLOAD_OIDN=ON`を追加。
- conda依存関係を使用した場合(2.B)
```bash
export CONDA_INCLUDE_PATH=path/to/anaconda/include
cd ./ext/LuisaRender
cmake -S . -B build -D CMAKE_BUILD_TYPE=Release -D PYTHON_VERSIONS=3.9 -D LUISA_COMPUTE_DOWNLOAD_NVCOMP=ON -D LUISA_COMPUTE_ENABLE_GUI=OFF -D ZLIB_INCLUDE_DIR=$CONDA_INCLUDE_PATH
cmake --build build -j $(nproc)
```
`CONDA_INCLUDE_PATH`は典型的には`/home/user/anaconda3/envs/genesis/include`のようになります。
### 4. FAQ
- アサーションエラー 'lerror’ failed: Broken pipe:
CUDAのバージョンがコンパイル時と一致しているか確認してください。
- 2.Aを使用している場合に"`GLIBCXX_3.4.30`が見つかりません"というエラー
```bash
cd ~/anaconda3/envs/genesis/lib
mv libstdc++.so.6 libstdc++.so.6.old
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++.so.6
```