はじめに
こんにちは、しゅんです! 重要事項:マジで遊んでるだけ
今回は「転生したらスライムだった件」の「リムル」を超適当にBlenderで作成し、Genesisに取り込んでシミュレーションを試してみました。目標はリムルにジャンプや壁越えをさせること、そして将来的には強化学習で動きを洗練させることです。この記事では、シミュレーション準備と基本的なモデルの導入について紹介します。
前回の記事見てくれてありがとうございます。
Blenderでリムルモデル作成
まずはBlenderで簡単にスライム形状を作成しました。あまり細かい調整はせず、動作確認が主目的なので、形がそれっぽければOKです。
エクスポート形式は.obj
を使用。以下のパスに保存しました:
/your_path/rimuru.obj
適切なパスに置き換えすること
Genesisのセットアップ
必要な準備
Ubuntu 24.04環境でGenesisを動かす手順は前回の記事をご覧ください。また、以下の環境でテストしました:
- GPU: NVIDIA RTX 3080 (VRAM 8GB)
- Genesis Version: 最新
基本的なシーンの構築
まずは地面にスライムを配置し、動作確認してみます。
コード:
import numpy as np
import genesis as gs
# 初期化
gs.init(seed=0, precision='32', logging_level='debug')
# シーン作成
scene = gs.Scene(
sim_options=gs.options.SimOptions(
substeps=10,
gravity=(0, 0, -9.8),
),
mpm_options=gs.options.MPMOptions(
dt=5e-4,
lower_bound=(-1.0, -1.0, -0.2),
upper_bound=(1.0, 1.0, 1.0),
),
viewer_options=gs.options.ViewerOptions(
camera_pos=(1.5, 0, 0.8),
camera_lookat=(0.0, 0.0, 0.0),
camera_fov=40,
)
)
# 地面とスライムを追加
scene.add_entity(morph=gs.morphs.Plane(), material=gs.materials.Rigid(rho=1000, friction=0.5))
slime = scene.add_entity(
morph=gs.morphs.Mesh(file='your_path/rimuru.obj', pos=(0.0, 0.0, 0.2), scale=0.05, euler=(90, 0, 0)),
material=gs.materials.MPM.Muscle(E=1e4, nu=0.39, rho=1000., model='neohooken'),
)
# シミュレーション実行
scene.build()
scene.reset()
for i in range(1000):
scene.step()
結果
シミュレーション内でスライムは物理エンジンによる影響を受け、地面に落ちました。形状も概ね保持されています。(嘘です...ちょっとスライムが謎過ぎて調節が何時間もかかった)次回は壁を設置して障害物の追加に挑戦します!