Catatan : Perpustakaan tidak dipelihara/dibangun secara aktif, jika Anda ingin berkontribusi, silakan buka terbitan.
Simulate adalah perpustakaan untuk membuat dan berbagi lingkungan simulasi dengan mudah untuk agen cerdas (misalnya pembelajaran penguatan) atau pembuatan data sintetis.
Instal Simulasikan (lebih disukai di lingkungan virtual) dengan pip install simulate
sederhana Catatan : vtk
tidak dibuat untuk Apple Silicon dengan Python 3.8. Silakan instal dengan >3.9 dalam hal ini.
Buat env virtual dan kemudian instal alat gaya/kualitas kode serta basis kode secara lokal
pip install --upgrade simulate
Sebelum Anda menggabungkan PR, perbaiki gayanya (kami menggunakan isort
+ black
)
make style
API Simulate terinspirasi oleh API Kubric yang hebat. Pengguna membuat Scene
dan menambahkan Assets
di dalamnya (objek, kamera, lampu, dll).
Setelah adegan dibuat, Anda dapat menyimpan dan membagikannya sebagai file. Ini adalah file GIFT alias file JSON dengan sumber daya terkait.
Anda juga dapat merender adegan atau melakukan simulasi menggunakan salah satu mesin rendering/simulasi backend (saat ini Unity, Blender, dan Godot).
Format penyimpanan/berbagi adalah mesin agnostik dan menggunakan standar industri grafis.
Mari kita melakukan eksplorasi cepat bersama-sama.
import simulate as sm
scene = sm.Scene()
API Python terletak di src/simulate. Ini memungkinkan pembuatan dan pemuatan adegan, dan mengirimkan perintah ke backend.
Kami menyediakan beberapa backend untuk merender dan/atau menjalankan adegan. Backend default tidak memerlukan instalasi khusus dan didasarkan pada pyvista. Ini memungkinkan seseorang untuk merender/menjelajahi adegan dengan cepat tetapi tidak menangani simulasi fisika. Untuk memungkinkan simulasi fisik, backend Unity misalnya dapat digunakan dengan mengatur engine="unity"
(dan segera backend Godot dan Blender Engine juga). Build Unity akan diunduh secara otomatis (jika belum) dan dimunculkan untuk menjalankan simulasi. Alternatifnya, seseorang dapat mengunduh dan menggunakan editor Unity itu sendiri, yang kemudian harus dibuka dengan Unity versi 2021.3.2f1.
Memuat adegan dari file lokal atau Hub dilakukan dengan Scene.create_from()
, menyimpan secara lokal atau mendorong ke Hub dengan scene.save()
atau scene.push_to_hub()
:
from simulate import Scene
scene = Scene.create_from('tests/test_assets/fixtures/Box.gltf') # either local (priority) or on the Hub with full path to file
scene = Scene.create_from('simulate-tests/Box/glTF/Box.gltf', is_local=False) # Set priority to the Hub file
scene.save('local_dir/file.gltf') # Save to a local file
scene.push_to_hub('simulate-tests/Debug/glTF/Box.gltf') # Save to the Hub - use a token if necessary
scene.show()
Contoh dasar pembuatan pemandangan dengan bidang dan bola di atasnya:
import simulate as sm
scene = sm.Scene()
scene += sm.Plane() + sm.Sphere(position=[0, 1, 0], radius=0.2)
>>> scene
>>> Scene(dimensionality=3, engine='PyVistaEngine')
>>> └── plane_01 (Plane - Mesh: 121 points, 100 cells)
>>> └── sphere_02 (Sphere - Mesh: 842 points, 870 cells)
scene.show()
Sebuah objek (serta Adegan) hanyalah sebuah simpul di pohon yang dilengkapi dengan mesh opsional (di bawah tenda dibuat/disimpan/diedit sebagai objek pyvista.PolyData
atau pyvista.MultiBlock
) dan material dan/atau cahaya, kamera, agen benda khusus.
Pembantu pembuatan objek berikut saat ini disediakan:
Object3D
objek apa pun dengan jaring dan/atau materialPlane
Sphere
Capsule
Cylinder
Box
Cone
Line
MultipleLines
Tube
Polygon
Ring
Text3D
Triangle
Rectangle
Circle
StructuredGrid
Banyak dari objek ini dapat divisualisasikan dengan menjalankan contoh berikut:
python examples/basic/objects.py
Menambah/menghapus objek:
+
) (atau metode alternatif .add(object)
) akan menambahkan objek sebagai anak dari objek sebelumnya.-
) atau perintah .remove(object)
..clear()
.scene.sphere += sphere_child
.Mengakses objek:
name
saat pembuatan atau secara otomatis dihasilkan dari nama kelas + penghitung pembuatan)..get_node(name)
.tree_*
tersedia di node mana pun untuk menavigasi atau membuat daftar bagian pohon node dengan cepat.Berikut adalah beberapa contoh manipulasi:
# Add two copy of the sphere to the scene as children of the root node (using list will add all objects on the same level)
# Using `.copy()` will create a copy of an object (the copy doesn't have any parent or children)
scene += [scene.plane_01.sphere_02.copy(), scene.plane_01.sphere_02.copy()]
>>> scene
>>> Scene(dimensionality=3, engine='pyvista')
>>> ├── plane_01 (Plane - Mesh: 121 points, 100 cells)
>>> │ └── sphere_02 (Sphere - Mesh: 842 points, 870 cells)
>>> ├── sphere_03 (Sphere - Mesh: 842 points, 870 cells)
>>> └── sphere_04 (Sphere - Mesh: 842 points, 870 cells)
# Remove the last added sphere
>>> scene.remove(scene.sphere_04)
>>> Scene(dimensionality=3, engine='pyvista')
>>> ├── plane_01 (Plane - Mesh: 121 points, 100 cells)
>>> │ └── sphere_02 (Sphere - Mesh: 842 points, 870 cells)
>>> └── sphere_03 (Sphere - Mesh: 842 points, 870 cells)
Objek dapat dengan mudah diterjemahkan, diputar, diskalakan
Berikut beberapa contohnya:
# Let's translate our floor (with the first sphere, it's child)
scene.plane_01.translate_x(1)
# Let's scale the second sphere uniformly
scene.sphere_03.scale(0.1)
# Inspect the current position and scaling values
print(scene.plane_01.position)
>>> array([1., 0., 0.])
print(scene.sphere_03.scaling)
>>> array([0.1, 0.1, 0.1])
# We can also translate from a vector and rotate from a quaternion or along the various axis
Mengedit objek:
Mesin visualisasi default disediakan dengan backend vtk dari pyvista
.
Memulai mesin visualisasi dapat dilakukan hanya dengan .show()
.
scene.show()
Anda dapat menemukan jembatan ke mesin rendering/simulasi lainnya di direktori integrations
.
Jika Anda menjalankan GCP, ingatlah untuk tidak menginstal pyvistaqt
, dan jika Anda melakukannya, uninstal pyvistaqt di lingkungan Anda, karena QT tidak berfungsi dengan baik di GCP.
@misc { simulate ,
author = { Thomas Wolf, Edward Beeching, Carl Cochet, Dylan Ebert, Alicia Machado, Nathan Lambert, Clément Romac } ,
title = { Simulate } ,
year = { 2022 } ,
publisher = { GitHub } ,
journal = { GitHub repository } ,
howpublished = { url{https://github.com/huggingface/simulate} }
}