Tips Konfigurasi Unity: Memori, Audio dan Tekstur


Artikel ini akan menjelaskan beberapa tips dan trik dalam mengoptimalkan memori dan bekerja dengan teksur. Tips dan triknya dikompilasikan oleh Steve Hughes yang mana ia berkerja sebagai Applications Engineer for Visual Computing di Intel.

Untuk informasi lebih lanjut tentang optimalisasi Unity, bisa dilihat di artikel di link ini.

Bekerja dengan Tekstur

  • Jangan buat Mipmap untuk tekstur kecuali benar-benar diperlukan
  • Gunakan tekstur yang sudah dikompres
  • Jangan set teksur menjadi readable (CPU R/W) kecuali ketika diperlukan. Ini menghindari kopi CPU, marker, dan lain-lain.
  • Kurangi ukuran tekstur bergantung pada resolusi layar
  • Untuk Android dan layar kecil:
    • Untuk model – lewati MIP atas (Quality Settings>Rendering>Texture Quality).
    • Pisahkan kanal RGB (dapat dikompres) dengan Alpha (tidak dapat dikompres).

Tips Desain

  • Map normal tidak perlu skalanya 1:1 dengan diffuse map.
  • Hilangkan keyframe redundan dari animasi (hanya refresh untuk mengganti grafik).

Untuk Model Mesh

  • Hilangkan kanal yang tidak diperlukan dari mesh (ada di konfigurasi Player, aktifkan Optimized Mesh Data).
  • Untuk mesh dengan detail tinggi pada sistem dengan RAM kecil, set Quality menggunakan maxLOD.

Untuk informasi lebih lanjut tentang optimalisasi grafik di Unity, lihat: How To Plan Optimizations with Unity 

Audio

  • Gunakan buffer 200k untuk audio playback.
    • Masukkan klip pendek yang tidak dikompres ke buffer tersebut
    • Atau gunakan AudioClip.GetData untuk mengembangkan, dan kemudian bebaskan yang sudah dikompres

Optimalisasi Memori

  • Ada dua metode untuk melihat apa yang memakan RAM:
    • Profiler.GetRuntimeMemorySize() bisa menemukan objek yang mengkonsumsi banyak RAM (akan lebih baik untuk ditampilkan di debug log)
    • Lihat di Mono CIL (Common Intermediate Language) untuk 3 jenis alloc – Newarr, Newobj, Box.
  • Perluas secara manual heap-nya dengan mengalokasikan ruang memori sebelumnya pada proses startup (didasarkan pada sejarah penggunaan aset).
  • Untuk keperluan pada saat yang berjalan, panggil Resources.UnloadAsset (jika asetnya masih perlu untuk direferensikan) atau gunakan Resources.UnloadUnusedAssets (untuk yang tidak direferensikan)
  • Dikarenakan Auto Garbage Collection-nya Unity biasanya dipanggil hanya ketika heap sudah penuh atau tidak ada ruang yang cukup untuk freeblock, pertimbangkan untuk memanggil (System.GC.Collect) sebelum dan sesudah loading sebuah level (atau gunakan timer) atau jalankan cleanup pada waktu transisi.
  • Hindari fungsi dengan jumlah alloc tersembunyi yang banyak.
  • Hindari fragmentasi memori menggunakan structure (yang disimpad pada stack) daripada class (disimpan di heap).
  • Ingat, enumerator mengalokasikan RAM. Dan (Foreach) diproses ke dalam sebuah blok kode yang mengalokasikan sebuah enumerator juga.
  • Untuk alasan yang sama, hindari metode Anonymous dan Lambdas.
  • Stream aset untuk mengkonsumsi RAM lebih kecil. Kumpulkan aset terkait ke dalam Asset Bundle dan buat dan stream mereka ke luar pada saat run time (pastikan untuk menghancurkan mereka sebelum adegan selanjutnya atau stream paket aset).
  • Jangan tambahkan teks secara bersama. Jangan manipulasi teks per frame (sebagai gantinya tambahkan sebuah jebakan jadi kamu hanya perlu memperbaharui jika itu berganti nilai).
  • Gunakan class StringBuilder untuk membuat teks, jangan menggunakan array ke dalam sebuah fungsi yang menghasilkan teks karena itu akan terus membuang dan mengalokasi ulang setiap saat dalam loop.
  • Buat class kumpulan aset (peluru / misil)nuntuk menyimpan objek daripada menggunakan class baru seperti:
    MyClass m – poolOfMyClass //do stuff poolOfMyClass.Store(m);

KREDIT: beberapa bagian dari materi di atas didapat dari:

Untuk informasi lebih lanjut, lihat:

* Artikel ini adalah hasil kerja sama dengan Intel Developer Zone. Artikel asli bisa dilihat di link ini.