Tahun lepas, Kejadian dikeluarkan sebagai alat baru yang menarik untuk mewujudkan simulasi fizik yang realistik, dunia 4D interaktif, dan banyak lagi. Saya tidak sabar -sabar untuk mencubanya, tetapi mendapatkannya bekerja tidak mudah. Saya harus mengakui saya menghadapi banyak cabaran semasa persediaan.
Dalam tutorial ini, saya akan berkongsi masalah secara ringkas yang saya lari, dan tunjukkan bagaimana saya akhirnya berjaya menggunakan Google Colab dan beberapa helah.
Jika anda hanya mahukan gambaran keseluruhan Kejadian, lihat artikel saya sebelumnya, Kejadian Fizik Enjin: Panduan dengan Contoh.
Apabila saya mula bekerja dengan Kejadian, saya mengikuti langkah pemasangan dalam dokumentasi. Segera, saya memukul masalah dengan kebergantungan. Kejadian memerlukan versi tertentu modul yang dipanggil Taichi (1.7.x), tetapi macOS saya tidak menyokongnya. Untuk rujukan, Mac saya berumur 8 tahun ....
Selepas beberapa penyelidikan, saya menyedari pengguna lain mempunyai masalah yang sama, walaupun dengan komputer yang lebih baik. Selepas berjam -jam usaha, dan mendapati bahawa Kejadian hanya berfungsi dengan versi python tertentu, akhirnya saya memasangnya.
tetapi masalah baru muncul. Ia tidak akan menyebabkan apa -apa, dan saya mempunyai beberapa masalah dengan OpenGL. Walaupun saya cuba menjalankan fail contoh dari github mereka, saya menghadapi lebih banyak kesilapan dan konflik.
Kemudian, apabila saya fikir saya telah menyusunnya, saya mula mendapat kesilapan seperti "Seragam tidak dijumpai," yang bermaksud beberapa tetapan rendering telah hilang.
Sepanjang proses ini, saya meneliti secara dalam talian untuk melihat sama ada orang lain menghadapi masalah yang sama. Ternyata saya bukan satu -satunya orang yang menghadapi kesukaran yang sama, dan ramai yang tidak dapat mencari penyelesaian untuk membuat skrip mereka berfungsi.
Selepas kekecewaan awal, saya memutuskan untuk mencuba Google Colab dengan akaun Pro, dan ia menjadi tepat apa yang saya perlukan. Menggunakan sumber GPU Colab, saya dapat:
Saya memilih NVIDIA A100-SXM4-40GB, yang terbukti cukup kuat untuk mengendalikan simulasi Kejadian dengan cekap.
Sebaik sahaja saya menyediakan persekitaran Google Colab saya dan dipasang Kejadian, saya cuba menjalankan contoh paling mudah dari dokumentasi:
import genesis as gs gs.init(backend=gs.cpu) scene = gs.Scene(show_viewer=True)
Contoh ini harus memulakan Kejadian dengan backend CPU dan memaparkan adegan asas. Walau bagaimanapun, saya segera berlari ke dalam kesilapan berikut:
GenesisException: No display detected. Use show_viewer=False for headless mode.
Mesej ralat menunjukkan bahawa Kejadian cuba membuat tetingkap grafik untuk menjadikan tempat kejadian, tetapi Google Colab tidak menyokong visualisasi masa nyata. Colab berjalan dalam persekitaran terpencil tanpa akses kepada paparan tempatan, jadi show_viewer = parameter benar di gs.scene () inisialisasi tidak berfungsi.
Seperti yang dicadangkan oleh mesej ralat, saya mengubahsuai kod untuk melumpuhkan penonton:
import genesis as gs gs.init(backend=gs.cpu) scene = gs.Scene(show_viewer=True)
Ini membenarkan skrip untuk dilaksanakan tanpa terhempas. Walau bagaimanapun, pendekatan ini bermakna tidak ada cara untuk memvisualisasikan hasilnya secara langsung.
Selepas melihat dalam talian, saya dapati bahawa orang lain menghadapi masalah yang sama. Banyak penyelesaian yang dicadangkan yang melibatkan mengkonfigurasi persekitaran OpenGL jauh atau menggunakan XVFB untuk membuat paparan maya. Malangnya, saya tidak dapat mendapatkan kaedah ini untuk bekerja dengan pasti di COLAB, mungkin disebabkan oleh konflik dan keterbatasan alam sekitar.
Pada ketika ini, saya memerlukan penyelesaian yang lebih praktikal!
Sejak rendering masa nyata bukan pilihan dalam colab, saya memutuskan untuk menyimpan bingkai output yang diberikan oleh bingkai sebagai imej. Dengan idea -idea ini, saya dapat menghasilkan urutan imej yang kemudiannya boleh digabungkan menjadi animasi.
Di bahagian ini, saya akan membimbing anda melalui pelaksanaan kod dan output yang saya dapat.
Pertama sekali, saya memasang Kejadian:
GenesisException: No display detected. Use show_viewer=False for headless mode.
Kemudian, saya memulakan Kejadian dengan backend CUDA untuk pecutan GPU.
scene = gs.Scene(show_viewer=False)
Ini adalah output yang saya dapat:
pip install genesis-world
fungsi os.makedirs () membuat folder yang dipanggil simulasi_frames dalam laluan yang ditentukan, dan argumen yang ada
import genesis as gs gs.init(backend=gs.cuda)
Inisialisasi adegan
Seterusnya, saya perlu membuat adegan di mana saya boleh menambah objek dan berinteraksi dengan mereka.
gs.scene () memulakan ruang simulasi baru, dan show_viewer = palsu melumpuhkan visualisasi masa nyata. Pada ketika ini, saya mempunyai adegan kosong yang bersedia untuk memulakan bangunan.
[Genesis] [INFO] Running on [NVIDIA A100-SXM4-40GB] with backend gs.cuda. Device memory: 39.56 GB. [Genesis] [INFO] ? Genesis initialized. Version: 0.2.1, Seed: None, Precision: 32.
Dengan adegan siap, saya mula menambah objek. Saya mula -mula menambah pesawat, yang bertindak sebagai tanah.
Pesawat berfungsi sebagai asas rata untuk simulasi. Secara lalai, ia tidak terhingga dan terletak rata di sepanjang paksi x-y.
import os save_dir = "/content/simulation_frames" os.makedirs(save_dir, exist_ok=True)
Saya menetapkan kotak di (0, 0, 0), tepat di tengah -tengah tempat kejadian, dan saya mengubah saiznya menjadi 0.5 unit lebar, tinggi, dan mendalam, menjadikannya lebih kecil daripada lalai.
Sekarang, saya mempunyai persediaan mudah: pesawat sebagai tanah dan kotak yang terletak di atasnya.scene = gs.Scene(show_viewer=False)
Tambah kamera
Untuk menangkap apa yang berlaku di tempat kejadian, saya menambah kamera.
import genesis as gs gs.init(backend=gs.cpu) scene = gs.Scene(show_viewer=True)
Saya menetapkan resolusi imej kepada 320x240 piksel, pilihan praktikal untuk ujian, dan meletakkan kamera di (3.5, 2.0, 2.5), yang memberikan pandangan yang jelas tentang adegan dari sedikit di atas dan ke sisi. Untuk memastikan kotak itu tetap fokus, saya mensasarkan kamera di (0, 0, 0.5), tepat di atas pusat kotak. Dengan medan pandangan 30 darjah (FOV), kamera menangkap perspektif yang sempit dan fokus di tempat kejadian.
Langkah seterusnya adalah untuk membina tempat kejadian untuk menyediakannya untuk simulasi dan rendering.
GenesisException: No display detected. Use show_viewer=False for headless mode.
Langkah ini sangat penting kerana Kejadian menggunakan kompilasi hanya dalam masa (JIT) untuk mengoptimumkan simulasi. Apabila saya membina tempat kejadian, Kejadian:
Sekarang semuanya sudah siap -pesawat, kotak, dan kamera saya ditubuhkan, dan tempat kejadian dibina.
Untuk memvisualisasikan simulasi, saya memberikan dan menyimpan bingkai output dengan bingkai. Setiap bingkai disimpan sebagai imej dalam direktori Simulation_Frames.
scene = gs.Scene(show_viewer=False)
Semasa proses rendering, saya mendapati bahawa beberapa bingkai pertama diberikan dengan cepat (sehingga 2,297 fps), tetapi prestasi menurun apabila simulasi berkembang. FPS akhirnya jatuh ke sekitar 0.33 fps dengan bingkai 25. Ini mungkin disebabkan oleh peningkatan kerumitan pengiraan simulasi atau mungkin kekangan sumber GPU untuk adegan yang lebih besar.
ini adalah output yang saya dapat:
pip install genesis-world
ini adalah imej yang saya dapat:
Setiap imej menunjukkan bagaimana kotak bergerak berhubung dengan pesawat dari masa ke masa, seperti yang dilihat melalui kamera. Simulasi berjalan dalam langkah -langkah, dan dengan setiap langkah, kedudukan kotak berubah, menjadikannya kelihatan seperti kotak bergerak.
Contoh ini menyoroti bagaimana Kejadian dapat mensimulasikan dan memaparkan interaksi fizikal yang mudah. Walaupun persediaan ini adalah asas, ia memberikan idea yang baik tentang bagaimana objek berkelakuan di tempat kejadian. Tetapi anda benar -benar boleh membuat senario yang lebih kompleks dan realistik dengan Kejadian! Kami akan meneroka beberapa keupayaan ini di bahagian seterusnya.
Kejadian membolehkan anda membuat adegan kompleks dengan menambahkan pelbagai objek dan morphs. Objek boleh berkisar dari primitif mudah seperti pesawat, kotak, dan sfera ke entiti yang lebih kompleks seperti robot dan medan.
Bentuk primitif:
Sokongan fail luaran:
rendering dan visualisasi
rakaman video
Sebagai contoh, anda boleh mengkonfigurasi kamera untuk bergerak di jalan bulat di sekitar tempat kejadian sambil menangkap bingkai. Fungsi cam.start_recording () memulakan rakaman, dan semasa setiap langkah simulasi, kedudukan kamera dikemas kini. Sebaik sahaja semua bingkai ditangkap, cam.stop_recording () menyimpan video sebagai "video.mp4".
Video akhir memberikan pandangan yang lancar tentang simulasi, menunjukkan bagaimana objek berinteraksi dan bergerak dari masa ke masa.
Generasi Terrain untuk Tugas Locomotion
extensibility
Tutorial ini memberikan contoh mudah untuk membantu anda memulakan Kejadian. Kami meliputi asas -asas, seperti membuat adegan, menambah objek, dan memberikan output, untuk menunjukkan bagaimana enjin fizik yang kuat ini berfungsi.
Atas ialah kandungan terperinci Genesis Fizik Enjin: Panduan Langkah demi Langkah untuk Menubuhkan Kejadian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!