ملاحظة : لا تتم صيانة/إنشاء المكتبة بشكل نشط، إذا كنت ترغب في المساهمة، يرجى فتح مشكلة.
Simulate عبارة عن مكتبة لإنشاء بيئات محاكاة ومشاركتها بسهولة للعملاء الأذكياء (مثل التعلم المعزز) أو توليد البيانات الاصطناعية.
تثبيت المحاكاة (تفضيليًا في بيئة افتراضية) من خلال pip install simulate
البسيطة ملاحظة : لم يتم تصميم vtk
لـ Apple Silicon مع Python 3.8. الرجاء التثبيت مع > 3.9 في هذه الحالة.
قم بإنشاء بيئة افتراضية ثم قم بتثبيت أدوات نمط/جودة التعليمات البرمجية بالإضافة إلى قاعدة التعليمات البرمجية محليًا
pip install --upgrade simulate
قبل دمج العلاقات العامة، قم بإصلاح النمط (نستخدم isort
+ black
)
make style
واجهة برمجة تطبيقات Simulate مستوحاة من واجهة برمجة تطبيقات Kubric الرائعة. يقوم المستخدم بإنشاء Scene
وإضافة Assets
فيه (الأشياء والكاميرات والأضواء وما إلى ذلك).
بمجرد إنشاء المشهد، يمكنك حفظه ومشاركته كملف. هذا ملف GIFT، ويعرف أيضًا باسم ملف JSON مع الموارد المرتبطة به.
يمكنك أيضًا عرض المشهد أو إجراء عمليات محاكاة باستخدام أحد محركات العرض/المحاكاة الخلفية (حاليًا Unity وBlender وGodot).
تنسيق الحفظ/المشاركة لا يعتمد على المحرك ويستخدم معيار صناعة الرسوميات.
دعونا نقوم باستكشاف سريع معًا.
import simulate as sm
scene = sm.Scene()
توجد واجهة برمجة تطبيقات Python في src/simulate. فهو يسمح بإنشاء المشاهد وتحميلها وإرسال الأوامر إلى الواجهة الخلفية.
نحن نقدم العديد من الواجهات الخلفية لعرض و/أو تشغيل المشهد. لا تتطلب الواجهة الخلفية الافتراضية أي تثبيت محدد وتعتمد على pyvista. إنه يسمح للمرء بعرض/استكشاف المشهد بسرعة ولكنه لا يتعامل مع محاكاة الفيزياء. للسماح بعمليات المحاكاة الفيزيائية، يمكن على سبيل المثال استخدام الواجهة الخلفية Unity عن طريق ضبط engine="unity"
(وقريبًا الواجهة الخلفية لـ Godot وBlender Engines أيضًا). سيتم تنزيل إصدار Unity تلقائيًا (إن لم يكن بالفعل) ويتم نشره لتشغيل عمليات المحاكاة. وبدلاً من ذلك، يمكن للمرء تنزيل واستخدام محرر Unity نفسه، والذي يجب بعد ذلك فتحه باستخدام إصدار Unity 2021.3.2f1.
يتم تحميل مشهد من ملف محلي أو من Hub باستخدام Scene.create_from()
أو حفظه محليًا أو الدفع إلى Hub باستخدام scene.save()
أو 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()
مثال أساسي لإنشاء مشهد به مستوى وكرة فوقه:
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()
الكائن (بالإضافة إلى المشهد) هو مجرد عقدة في شجرة مزودة بشبكة اختيارية (تحت الغطاء الذي تم إنشاؤه/تخزينه/تحريره ككائنات pyvista.PolyData
أو pyvista.MultiBlock
) والمواد و/أو الضوء، والكاميرا، والوكلاء كائنات خاصة.
يتم حاليًا توفير مساعدي إنشاء الكائنات التالية:
Object3D
أي كائن به شبكة و/أو مادةPlane
Sphere
Capsule
Cylinder
Box
Cone
Line
MultipleLines
Tube
Polygon
Ring
Text3D
Triangle
Rectangle
Circle
StructuredGrid
يمكن تصور العديد من هذه الكائنات عن طريق تشغيل المثال التالي:
python examples/basic/objects.py
إضافة/إزالة الكائنات:
+
) (أو الطريقة .add(object)
) بدلاً من ذلك إلى إضافة كائن باعتباره ابنًا لكائن سابق.-
) أو الأمر .remove(object)
..clear()
.scene.sphere += sphere_child
.الوصول إلى الكائنات:
name
عند الإنشاء أو التي يتم إنشاؤها تلقائيًا من اسم الفئة + عداد الإنشاء)..get_node(name)
.tree_*
المختلفة على أي عقدة للتنقل بسرعة أو إدراج جزء من شجرة العقد.فيما يلي بعض الأمثلة على التلاعب:
# 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)
يمكن بسهولة ترجمة الكائنات وتدويرها وقياسها
فيما يلي بعض الأمثلة:
# 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
تحرير الكائنات:
يتم توفير محرك تصور افتراضي مع الواجهة الخلفية vtk لـ pyvista
.
يمكن بدء تشغيل محرك التصور ببساطة باستخدام .show()
.
scene.show()
يمكنك العثور على جسور لمحركات العرض/المحاكاة الأخرى في دليل integrations
.
إذا كنت تعمل على GCP، فتذكر عدم تثبيت pyvistaqt
، وإذا قمت بذلك، فقم بإلغاء تثبيته في بيئتك، نظرًا لأن QT لا يعمل بشكل جيد على 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} }
}