Karakter rendering, dengan cut off tungkai (model Blender di Java / OpenGL)

10

Aspek apa yang harus saya pertimbangkan untuk membuat animasi karakter dan kelas rendering jika saya ingin dapat memiliki anggota badan yang bisa dilepas? Saya telah mengembangkan sistem tubuh terperinci yang dapat menentukan segalanya hingga sistem saraf ditetapkan. Saya bertujuan untuk sesuatu yang mirip dengan tingkat detail kerusakan yang ditemukan di Dwarf Fortress. Misalnya, ketika karakter merusak lengan atas mereka, ada kemungkinan kerusakan saraf yang dapat menonaktifkan seluruh lengan. Atau mereka bisa kehilangan lengan sepenuhnya.

Saya memiliki sistem yang ditulis untuk menangani bagian data ini. Setiap karakter memiliki trunk, yang memiliki pelengkap dan bagian internal. Setiap pelengkap juga dapat memiliki pelengkap anak dan bagian internal. Pelengkap anak dinonaktifkan / dihapus jika pelengkap induk dinonaktifkan / dihapus. Jika salah satu pelengkap cacat / dihapus atau bagian internal diperlukan seumur hidup, karakter akan segera mati.

Apa yang saya kerjakan sekarang adalah bagian gambar / animasi ini. Bagaimana cara menetapkan animasi untuk mengetahui yang diizinkan mengingat kondisi tubuh saat ini (lengan / kaki yang hilang dan sebagainya)? Bagaimana cara mengatur sistem menggambar untuk tidak menggambar anggota badan yang hilang? Apakah setiap ekstremitas / pelengkap harus memiliki modelnya sendiri (saya ingin menggambar pelengkap yang terpotong di tanah)?

Sistem sederhana yang saya transisi dari (saya baru saja menulisnya untuk pengujian) mengimpor semua frame kunci dari animasi sebagai model penuh ke dalam VBO (bersama dengan jumlah titik di mana frame kunci mulai / berhenti). Itu tidak mengimpor atau menggunakan tulang yang didefinisikan dalam Blender, dan itu tidak menyisipkan antar frame.

Ini mungkin pertanyaan yang cukup besar, jadi saya juga mencari sumber daya yang dapat membawa saya ke tempat yang harus saya tuju.

EDIT

Saya bertanya tentang animasi yang mengetahui anggota tubuh mana yang dianimasikan karena saya ingin mengaturnya untuk melakukan animasi alternatif jika anggota tubuh yang diperlukan hilang. Setelah memikirkan hal itu, saya membayangkan saya akan melakukan pemeriksaan itu sebelum mengaktifkan animasi, dan mengaktifkan animasi yang sesuai pada waktu itu.

MichaelHouse
sumber

Jawaban:

7

Saat ini saya sedang mengerjakan sistem yang sama. Animasi prosedural + pemotongan, dll.

Bagaimana cara menetapkan animasi untuk mengetahui yang diizinkan memberikan keadaan tubuh saat ini (lengan / kaki yang hilang dan sebagainya)?

Saya tidak cukup mengikuti bagian ini, jika anggota badan tidak ada, lalu siapa yang peduli apakah itu dianimasikan atau tidak, karena tidak dapat dilihat.

Apakah setiap ekstremitas / pelengkap harus memiliki modelnya sendiri (saya ingin menggambar pelengkap yang terpotong di tanah)?

Saya secara dinamis membangun ini dari menggunakan bobot tulang verteks. Kualitasnya mungkin sedikit lebih rendah daripada melakukan setiap anggota badan dengan tangan, tetapi lebih mudah setelah saya melakukannya sekali, karena saya kemudian dapat menerapkannya pada setiap model.

Dengan pendekatan waras dari bagian berikut, ya, setiap anggota tubuh akan memiliki model sendiri.

Saya mungkin memiliki model lengkap di tangan seluruh entitas, dan masing-masing anggota badan terpotong.

Bagaimana cara mengatur sistem menggambar untuk tidak menggambar anggota badan yang hilang?

2 pilihan utama, cara paling sederhana adalah dengan hanya menggambar tungkai secara terpisah, dan di mana tungkai bergabung memiliki wajah tambahan yang biasanya disembunyikan dengan tekstur "daging mentah" yang akan terlihat ketika anggota badan dihapus.

Pilihan kedua adalah melakukannya secara dinamis, ini hanya akan bekerja dengan model yang relatif sederhana. Pendekatannya adalah dengan mengambil model dasar, dan menemukan simpul yang ditimbang ke anggota tubuh yang ingin Anda potong-potong. Hapus simpul-simpul itu, perhatikan apa yang terhubung ke sehingga Anda tahu bagian terbuka. Anda kemudian secara dinamis menutup bagian terbuka dengan segitiga dengan tekstur "daging mentah". Dari sudut pandang pengembang perangkat lunak yang waras, pendekatan ini tidak bagus (run time model deformation), dan karakteristik kinerja yang kurang "datar", tapi saya agak menyukainya.

Meskipun metode pertama akan menghasilkan lebih banyak panggilan draw, metode ini juga sedikit lebih mudah didekati.

Saya pribadi menggunakan yang kedua, dengan kesuksesan relatif, tetapi semua model saya sangat rendah poli, jadi secara dinamis memotong model dan mengunggah ulang VBO dalam bingkai bisa dilakukan untuk saat ini.

Itu tidak mengimpor atau menggunakan tulang yang didefinisikan dalam Blender, dan itu tidak menyisipkan antar frame.

Ini membuatnya sangat sulit untuk melakukan pemotongan dengan cara prosedural, karena bagaimana Anda tahu simpul apa yang dimiliki oleh gabungan apa? Bobot dan pemotongan tulang vertex berjalan seiring dengan sangat baik. Saya sarankan Anda untuk memikirkan kembali bagian ini.

Saya juga menyarankan Anda berinvestasi dalam interpolasi. Tanpanya Anda tidak dapat mempercepat / memperlambat animasi Anda, dan Anda digabungkan dengan framerate. Ini berarti Anda akan dapat memperoleh lebih sedikit dari animasi Anda. mis. Anda tidak bisa memperlambat animasi jalan ketika seseorang berhenti, dll.

Michael
sumber
Terima kasih @Michael. Saya membawa interpolasi dan mengimpor tulang karena saya tahu saya akhirnya akan membutuhkannya, tetapi saya belum memilikinya. Dari apa yang Anda katakan, sepertinya saya akan tahu apa yang harus dilakukan setelah saya sampai di titik itu. Mungkin saya hanya akan mengasosiasikan sebuah pelengkap atau sekelompok pelengkap dengan tulang. Saya akan mengajukan pertanyaan terpisah tentang mengimpor tulang.
MichaelHouse
karena Anda mengerjakan sesuatu yang serupa, mungkin Anda memiliki informasi lebih lanjut tentang pertanyaan terkait ini? gamedev.stackexchange.com/q/20931/7191
MichaelHouse
5

Pilihan terbaik Anda adalah memotong anggota tubuh dan menggunakan beberapa submodel tergantung pada kondisi luka saat ini. Pendekatan Anda menggunakan VBO per keyframe hanya berlebihan; gunakan sistem animasi kerangka dan mainkan animasi berbeda tergantung dari kerusakan yang diterima (pincang dengan satu kaki, merangkak tanpa kedua kaki, dll).

Valve menerbitkan serangkaian slide yang bagus tentang luka dan dipotong-potong di L4D2. Saya sangat suka pendekatan menggunakan model untuk organ dan tulang, dan memotong model "kulit" berdasarkan proyeksi tekstur luka, tembakan, dll.

r2d2rigo
sumber
Menarik. Slide itu terlihat bagus. Ini sepertinya bekerja untuk kerusakan yang tidak memengaruhi seluruh pelengkap.
MichaelHouse