[Log Pengembangan] Mark3D.. Sistem pemuatan aset awal untuk mesin game 3D.

81
  • Saya telah membuat sistem pemuatan aset yang diperlukan dari mesin game.

  • Untuk mesin besar seperti Unity atau Unreal, setiap aset diikat dengan GUID untuk referensi dan pelacakan jika lokasi aset berubah.

  • Unity membuat file meta untuk setiap file aset yang berisi nilai GUID dan lainnya untuk memastikan keunikan aset. Unreal menggunakan database aset yang disebut "Curd" untuk mengelola aset.

  • Namun, mesin saya bukan mesin besar. Tujuannya adalah mesin game yang "kecil dan cepat" untuk pengembangan game pribadi. Membuat sistem seperti itu sulit dan pengelolaannya rumit bagi pengembang tunggal. Untuk saat ini, saya menggunakan API manajemen tunggal dengan metode klasik.

  • Pemuatan file melalui jalur relatif yang ditentukan. Jika tidak ditemukan, akan muncul "error" seperti metode klasik.

  • Menggunakan GUID untuk pengelolaan aset memang penting untuk konsistensi saat beberapa pengembang bekerja pada proyek yang sama. Namun, GUID memakan banyak memori saat runtime. Sebagai contoh, build Unity di Android atau iOS akan menggunakan puluhan hingga ratusan megabyte hanya untuk database aset.

  • Keuntungan serialisasi ini datang dengan pengorbanan performa yang besar.. (Begitulah zaman sekarang..)

====================================================================

  • Biasanya, mesin game menggunakan LoadAsset("./Asset/Texture/Face.png"). Karena mesin ini menggunakan dll, saya menggunakan metode klasik dan sinkron untuk pemuatan aset.

  • Dalam proyek ini, saya memutuskan untuk tidak memasukkan template API ke dalam dll. Saya juga ingin memberikan metode penggunaan API yang jelas kepada agen AI di masa mendatang. Mengungkapkan template dari dll sebagai antarmuka publik bukanlah praktik yang baik. Jika dll digunakan oleh middleware seperti GameLib, maka template API dapat diekspos sebagai library statis untuk kenyamanan pengguna.

  • Semua API telah diuji dan Json serta XML akan ditambahkan jika diperlukan nanti.

  • Saya berencana menggunakan library yyjson untuk Json dan libexpat atau yxml untuk XML. Keduanya ditulis dalam C dan memiliki alokasi memori yang kecil serta performa yang sangat cepat. yyjson adalah parser json terbaik yang pernah ada.

  • Sekarang saya perlu membuat Model dan Material, kemudian merendernya dan menyimpan/memuat informasi Scene. Ini adalah tahap pengembangan mesin game yang sebenarnya.. Pertanyaan besarnya adalah apakah saya akan menggunakan sistem node scene hirarki seperti Unity atau Unreal?

  • Keuntungan node scene hirarki adalah mudah dibuat dan digunakan. Namun, kelemahan utama pemrograman berorientasi objek adalah efisiensi cache CPU yang buruk. Apakah saya harus menggunakannya?

  • Jika struktur node hierarki dunia umum digunakan, sebagian besar operasi di dalam CPU akan melompat ke memori saat bekerja dengan satu node. Ini akan menghabiskan banyak waktu untuk akses baca ke memori utama dan cache (L1, L2, L3).

  • Itulah mengapa metode seperti DOD atau ECS muncul dan terbukti sangat efektif. Namun, kelemahannya adalah pemrograman yang tidak intuitif dan sulit digunakan.

  • Sebelumnya, saat membuat mesin game sendiri, saya mengelompokkan data berdasarkan fungsi, misalnya TerrainSceneManager untuk data terrain dan CharacterSceneManager untuk karakter. Apakah saya akan menggunakan metode ini lagi?

  • Namun, jika saya melakukannya, mungkin sulit untuk membuat berbagai jenis game dengan AI. Saya masih memikirkan solusi terbaik.

로그인한 회원만 댓글 등록이 가능합니다.

개발한당

KR | ID | EN
  • IDR
  • KOR
7.52 ▼ -0.01

2026.10.09 KEB 하나은행 고시회차 2302회

다가오는 한인 행사일정

  • 등록 된 일정이 없어요!