Dalam 2.5D Anda menggunakan aset 2D / teknik rendering untuk memberikan sensasi lingkungan 3D.
Sekarang, dengan definisi itu, dalam skenario yang berpotensi ambigu berikut ini, diperlukan beberapa elaborasi:
Game A
Menggunakan grafik 3D, GPU dipercepat dan semua (objek game adalah jerat, bukan gambar), dengan sudut kamera tetap. Mari kita membuatnya lebih buruk, proyeksi adalah ortografis, klasik 63,43 derajat. Satu-satunya cara untuk memperhatikan pada pandangan pertama bahwa grafik bukan 2D adalah karena 3DGC, kecuali bahwa Anda membuatnya dengan sangat hati-hati, mudah dibedakan dari sprite gambar tangan, tidak masalah proyeksi yang digunakan untuk membuatnya. Anda dapat bereksperimen dengan berbagai teknik render, parameter, shader, dll, dan Anda akan kesulitan untuk menyembunyikan fakta bahwa itu adalah jerat 3D.
Game B
Sebuah port dari Game A, tetapi platform penargetan yang dikenal memiliki perangkat keras yang tidak menangani grafik 3D dengan sangat baik atau tidak menanganinya sama sekali. Kemudian port menggantikan jerat dengan sprite. Itu masih menggunakan Kotak Bounding 3D untuk tabrakan, misalnya, dan objek memiliki properti posisi dengan nilai x, y dan z, karena logika permainan sebagian besar tidak disentuh atau tidak disentuh sama sekali, hanya kode render yang diubah.
Karena sprite Game B adalah render dari aset 3D Game A dan, untuk membuat segalanya lebih ambigu, Game A tidak melakukan apa pun yang membutuhkan shader rumit, di 99% dari semua GPU di luar sana Anda tidak dapat membedakan bingkai dari Game B bingkai dari Game A.
Dalam 2.5D, interaksi antara objek game terbatas pada serangkaian situasi di mana ilusi 3D tidak dapat dikompromikan. Untuk mewakili dua karakter pelukan, misalnya, Anda harus membuat file gambar tunggal dengan dua karakter yang berinteraksi, karena mencoba untuk mewakili tindakan pelukan hanya menggunakan satu gambar per karakter akan terlalu sulit atau tidak mungkin. Mungkin Anda bisa datang dengan tubuh karakter yang dibagi menjadi beberapa bagian dan menggambarnya dalam urutan yang benar. Dalam 3D masalah ini tidak ada (ada yang lain, yaitu menempatkan dua karakter dengan benar sehingga mereka tidak menembus mesh karakter lain).
Sekarang, untuk memvisualisasikan ini, bayangkan bahwa Game A dan B memiliki bug yang dalam beberapa situasi memungkinkan karakter pemain untuk melewati objek permainan lain, memungkinkan kita untuk membedakan antara yang 2.5D dan yang 3D dengan mudah.
Game B, 2.5D Render, sprite diurutkan berdasarkan nilai z dari vektor posisinya. Dalam contoh ini z positif turun dan negatif z naik. sumbu z dan sumbu y adalah paralel tetapi z diskalakan dengan faktor 0,5 dari y. Jadi jika area yang terlihat adalah dari 10y hingga -10y, di area yang sama kita memiliki dari 20z hingga -20z. Objek dengan z yang lebih besar akan ditarik belakangan, sehingga mereka akan terlihat berada di depan objek dengan z yang lebih rendah. Bayangan karakter pemain terlihat aneh karena bayangan berada di lapisan yang lebih unggul dari lantai, tetapi di lapisan yang lebih rendah itu semua benda lain, sehingga bayangan karakter pemain tidak pernah ada di atas kubus.
Game A, 3D Render. Buffer kedalaman (juga dikenal sebagai z-buffer) digunakan untuk pengujian kedalaman piksel presisi. Jadi, suatu objek tidak perlu sepenuhnya menyumbat yang lain, bahkan sebuah segitiga tidak perlu sepenuhnya menyumbat yang lain, kami memiliki tes kedalaman piksel presisi. Kami dapat memutar objek game dengan cara apa pun dan tetap mendapatkan hasil yang realistis saat mereka berinteraksi.
Dalam resume: dalam 2.5D sebuah sprite berada di depan atau di belakang sprite lain. Dalam 3D, sebuah mesh terbuat dari segitiga, tetapi segitiga bukanlah unit minimal saat menguji kedalaman, Anda dapat memiliki ketepatan piksel. Tentu saja, rotasi kamera dalam 2.5D tidak dimungkinkan karena aset dibuat untuk sudut kamera tetap, sedangkan dalam 3D adalah wajar, jika sudut kamera dibatasi oleh desain dalam game 3D adalah subjek lain.
Ada beberapa trik yang berbeda untuk memberikan sensasi berada di dunia 3D ketika Anda hanya dapat membuat grafik 2D, saya hanya menyajikan contoh yang dibuat dengan cepat menggunakan beberapa aset dari proyek tambang yang ditinggalkan.
Mengapa tidak selalu menggunakan 3D dan melupakan 2.5D?
Yah, saya dapat berpikir dalam beberapa contoh mengapa pengembang mungkin lebih suka pendekatan 2.5D:
- Mungkin mereka tidak tahu, atau tidak suka, API 3D (Direct3D, OpenGL, ada yang lain).
- Mungkin platform target tidak menangani grafik 3D dengan baik (komputer desktop lama, konsol 2D).
- Tim Anda dapat melakukan sprite yang luar biasa tetapi tidak untuk model 3D.
Seberapa banyak Anda dapat memperkirakan hasil grafik 3D menggunakan 2.5D?
Ada cakrawala kinerja dan kompleksitas pemrograman. Ketika Anda mendekati cakrawala itu, Anda mulai ragu apakah proyek Anda benar-benar mungkin pada 2.5D atau jika Anda harus menggunakan 3D penuh. Misalnya, Anda dapat menggunakan z-buffering dalam 2.5D (secara teori), tetapi dapatkah Anda membayar biaya memori video (komputer desktop lama dengan grafis onboard, bukan perangkat seluler yang kuat)? Apakah Anda ingin membayar biaya penyimpanan karena memiliki gambar ekstra untuk menghemat z-mask setiap sprite?
Kandidat yang baik untuk 2.5D adalah game RPG, pikirkan seri Gerbang Baldur, atau RTS, berpikir Age of Empires 1 dan 2 (AoE 3 sepenuhnya 3D dan mudah dibedakan).
Referensi yang berguna:
Z-Buffering: http://en.wikipedia.org/wiki/Z-buffering
Proyeksi ortografis: http://glasnost.itcarlow.ie/~powerk/GeneralGraphicsNotes/projection/orthographicprojection.html