Untuk game 2D, apakah ada alasan untuk TIDAK menggunakan API 3D seperti Direct3D atau OpenGL?

20

Saya sudah lama tidak memiliki hobi Game Development. Kembali ketika saya melakukannya, kebanyakan orang menggunakan Direct Draw untuk membuat game 2D. Pada saat saya berhenti orang mengatakan OpenGL atau Direct3D dengan proyeksi orthogonal adalah cara yang tepat.

Saya sedang berpikir untuk kembali membuat game 2D, khususnya pada ponsel tetapi mungkin juga pada platform XNA. Untuk membuat sesuatu menggunakan OpenGL saya akan memiliki kurva belajar (harapan) kecil untuk menyesuaikan diri dengan pengembangan 3D.

Apakah ada alasan untuk melewati itu dan sebaliknya bekerja dengan kerangka kerja 2D di mana saya hanya memiliki penyangga bingkai Lebar x yang harus saya isi dengan piksel?

Eric Palakovich Carr
sumber
Pertanyaan ini sebenarnya salah ... Maksud saya: Direct3D dan OpenGL sebenarnya bukan API 3D, bukan? Mereka menawarkan akselerasi perangkat keras, tetapi dalam 2D ​​dan 3D. Ada sedikit perbedaan di sana.
jacmoe

Jawaban:

20

Anda pasti harus menggunakan sesuatu yang menggunakan renderer 3D di backend. Tetapi dalam kode level yang lebih tinggi, Anda seharusnya tidak melihat sumbu Z. Semua itu harus diabstraksi di tingkat bawah. Jika Anda memanipulasi piksel secara langsung, Anda mungkin melakukan sesuatu yang salah.

Untuk permainan saya sendiri, saya membangun satu set kelas untuk berurusan dengan objek 2D. Logika permainan saya hanya berurusan dengan koordinat x dan y. Kelas saya juga menangani hal-hal seperti rotasi, penskalaan, mode campuran, dll, dll.

Tentu saja, ada juga perpustakaan 2D yang ada yang dapat Anda gunakan juga - Cocos2D adalah yang populer di iPhone. Sebagian besar, jika tidak semua, perpustakaan ini akan dibangun di atas API 3D tingkat rendah sehingga mereka mendapat manfaat dari akselerasi yang tersedia.

Dennis Munsie
sumber
Saya akan tertarik mendengar bagaimana xna menangani api 2d di belakang layar
Iain
5
Semuanya 3D pada akhirnya. Spritebatch, pekerja keras render 2D, adalah efek shader.
drxzcl
+1 untuk memisahkan antarmuka dari implementasi.
Steve S
@Iain Berikut ini adalah penafsiran XNA dalam DirectX11 yang ditulis oleh penulis XNA xnatoolkit.codeplex.com .
ClassicThunder
8

Ada alasan untuk tidak menggunakan API 3D.

Hanya komputer di NA, Uni Eropa Barat Laut dan Jepang yang mendukung mereka ...

Saya tinggal di Brasil misalnya, komputer saudara saya yang baru, memiliki prosesor multi-core, beberapa ram GB, namun tidak menjalankan game OpenGL.

Saya misalnya hanya bisa memainkan Dwarf Fortress (gunakan OpenGL untuk membuat grafik ASCII) di komputer saya sendiri, di komputer lain saya merasa berjalan lambat merangkak.

Dan ini bukan masalah hanya dengan Brasil, saya bertanya kepada orang-orang di sekitar, dan itu umum di beberapa tempat di dunia ... Populasi yang benar-benar memiliki kartu yang kompatibel dengan OpenGL atau Direct3D adalah minoritas ...

Hanya minoritas ini yang mendapat perhatian lebih dari perusahaan ...

Tetapi jika Anda hanya menargetkan pasar "tradisional" ini (NA, Northwest EU, JP), maka lakukanlah!

EDIT untuk downvoting mereka: Jelas Anda tidak setuju, jadi, apakah Anda memiliki BUKTI bahwa NOONE mengirimkan komputer lagi dengan chip VIA atau SIS yang jelek (atau bahkan produsen yang tidak dikenal atau lebih buruk) dengan tidak ada atau hanya dukungan OpenGL 1.0?

Saya memiliki DUA mesin seperti itu di rumah saya, dan mereka baru (keduanya memiliki lebih dari satu inti, keduanya memiliki ram 2GB, keduanya memiliki frekuensi clock di atas 2GHz ...)

Universitas saya memiliki 200 mesin seperti itu, bahkan beberapa yang buatan Dell.

Ini jelas sederhana, GPU itu mahal (bahkan yang Intel jelek), dan di pasar yang buruk, ini adalah barang mewah, orang membeli mesin untuk menjalankan MS Word dan membaca email tidak akan membeli mesin dengan chip grafis yang layak ketika mereka dapat membeli makanan yang 50 USD lebih murah, khususnya ketika 50 USD adalah yang harus dibeli kebanyakan orang selama sebulan penuh.

TOLONG, jangan datang ke sini mengatakan bahwa saya mengatakan BS, jika Anda tidak pernah mengunjungi negara dunia ketiga, dan juga, jangan katakan bahwa negara dunia ketiga orang tidak bermain game, mereka memang banyak, Osmos posting pengembang tentang peluncuran versi Linux mereka, menunjukkan bahwa banyak lalu lintas masuk (sebenarnya, sebagian besar) dari Rusia, jelas karena orang-orang itu biasanya diabaikan.

Di sini, di Brasil, gim yang paling populer adalah Counter-Strike, berjalan dalam mode Perangkat Lunak ... Beberapa Lan-Houses hanya memiliki 10% mesin dengan GPU, bahkan yang besar dengan 200 atau bahkan 300 stasiun ...

Seharusnya saya tidak memposting ini, saya tahu itu akan menarik down-vote, saya kehilangan poin gratis untuk memposting ini, setiap kali saya menjelaskan mengapa permainan saya yang lain menggunakan Allegro 4.4 bukannya 5.0 karena 5.0 tidak mendukung Direct Draw atau mode perangkat lunak Saya mendapatkan banyak kritik dari banyak orang yang mengatakan bahwa saya semacam pembohong atau bahwa saya bodoh karena mengatakan kebenaran ini tentang ketersediaan aktual dari akselerasi OpenGL.

EDIT 2: Untuk dapat bermain dan mengembangkan game yang memiliki OpenGL, saya harus memohon orang tua saya dan orang lain untuk membelikan saya GeForce 8600 (itu adalah kartu termurah yang saya temukan yang masih bisa menjalankan Mass Effect 1 dan UT3 lainnya -Game mesin), mereka membelikan saya satu, tapi sekarang saya beberapa tahun tanpa pernah mendapatkan hadiah lain lagi, bahkan hadiah ulang tahun, karena betapa mahalnya itu, dan saya berharap kartu ini berfungsi lebih dari 3 atau 4 tahun ...

EDIT 3:
Contoh praktis: Eletronic Arts membuat klien baru untuk Ultima Online yang menggunakan akselerasi 3D untuk grafik 2D-nya ... Hasil: Banyak pemain yang mengeluhkan framerates yang sangat rendah, dan EA mendukung keputusan mereka untuk menegakkan penggunaan klien baru (sekarang diizinkan untuk tetap menggunakan yang lama)

EDIT 4 pada 2015: Balasan ini akan ditinggalkan di sini sebagian besar sebagai artefak historis, saat ini jumlah komputer dengan chip yang sangat jelek bahkan di negara-negara dunia ketiga, mereka masih ada, khususnya di komputer yang ditujukan untuk kantor, tetapi mereka tidak begitu umum lagi, saya tidak berpikir itu layak untuk bekerja dengan API mode-Perangkat Lunak lagi, API berbasis OpenGL adalah cara untuk pergi sekarang.

lebih cepat
sumber
3
Tidak ada chip di luar sana yang tidak mendukung 3D hari ini. Kemungkinan besar Anda hanya perlu memperbarui driver, karena yang disediakan oleh Windows tidak datang dengan dukungan OpenGL. GPU omong kosong paling umum di luar sana adalah hal-hal Intel GMA dan bahkan yang memiliki beberapa dukungan OpenGl dasar.
Axel Gneiting
1
Diulangi lagi: keripik di sini LEBIH BURUK daripada barang Intel GMA. Dan ya, beberapa driver yang dimodifikasi memang menyelesaikan masalah, tetapi Anda tidak bisa mengharapkan pengguna tahu tentang itu.
speeder
Contoh praktis: Eletronic Arts membuat klien baru untuk Ultima Online yang menggunakan akselerasi 3D untuk grafik 2D-nya ... Hasil: Banyak pemain mengeluh framerates yang sangat rendah, dan EA mendukung keputusan mereka untuk menegakkan penggunaan klien baru (sekarang diperbolehkan untuk tetap menggunakan yang lama)
speeder
1
Klien baru berasal dari 2008, yang menurut cerita saya adalah: Orang-orang pada 2008, tidak menyukai klien OpenGL, dan kembali menggunakan yang 1997.
speeder
1
Hanya karena orang tidak memperbarui driver mereka tidak berarti komputer mereka tidak mendukung OpenGL dan Direct3D. OP harus memeriksa kompatibilitas OpenGL / Direct3D. Jika tidak ada di sana, ia harus memberi tahu pengguna untuk memperbarui driver-nya. Ini akan bekerja di 98,6% kasus, mungkin bahkan di dunia kedua dan ketiga. Serius, bisakah Anda menautkan ke komputer yang dapat Anda beli yang tidak memiliki dukungan OpenGL / Direct3D?
Avi
3

Tidak, tidak ada. Anda akan mendapatkan efek yang lebih baik dan rendering yang lebih cepat dengan menggunakan perender 3d. Sebagai contoh, di sini adalah permainan 2d saya membuat beberapa minggu yang lalu (dalam satu pekan) - efek bola sangat bersandar pada shader 3d, meskipun dalam banyak hal mereka efek 2d sedang. Demikian pula, saya banyak menggunakan teknologi rendering yang tersedia untuk game ini - ada tiga atau empat efek pixel shader yang terjadi di sana, yang semuanya membuat saya berkembang lebih cepat dan membuatnya lebih cantik.

Merangkul 3d dan menyukainya, tetapi menyukainya dengan satu sumbu lebih sedikit.

ZorbaTHut
sumber
2

API 3D umumnya merupakan cara yang harus dilakukan. GPU hari ini dirancang untuk membuat grafik 3D, sehingga kinerja Anda dijamin cukup solid. Dan seperti yang dikatakan ZorbaTHut, pergi dengan rute 3D memungkinkan Anda memanfaatkan hal-hal seperti pixel shaders.

Sebenarnya tidak ada banyak API 2D di luar sana lagi. DirectDraw telah ditinggalkan, dan sebagian besar pustaka berbasis 2D / vektor di luar sana menggunakan OpenGL atau Direct3D untuk melakukan renderingnya. Bahkan toolkit UI modern memanfaatkan API 3D untuk melakukan rendering dan komposisinya. Ambil WPF (kerangka UI terbaru Microsoft) sebagai contoh: ia menggunakan Direct3D untuk rendering.

Mike Strobel
sumber
2

Masih ada sejumlah mesin yang benar-benar mengejutkan di luar sana dengan akselerasi 3d yang jelek / tidak ada dan driver yang belum pernah diperbarui, sehingga menggunakan DirectDraw masih akan jauh lebih cepat daripada OpenGL atau D3D. Saya mengalami hal ini ketika mengerjakan game multiplayer 2d yang berusia sekitar 10 tahun sekarang ketika saya mencoba menulis backend rendering baru di OpenGL untuk mendukung platform lain. Banyak pemain melaporkan bahwa mode OpenGL tidak dapat diputar karena frame rate yang rendah. Saya juga setuju dengan poster Brasil bahwa ini lebih umum di luar AS dan Eropa, tetapi masih berlaku di tempat-tempat itu juga.

Jika Anda menargetkan ponsel atau XNA, maka pasti menggunakan 3D. Tetapi jika Anda ingin membuat game yang berjalan di PC mana saja, di mana saja, saya akan mengatakan tetap dengan DDraw.


sumber
1

Satu-satunya hal yang dapat saya pikirkan adalah menggunakan API 3D lebih dari 2D menambah kompleksitas dasar. Di OpenGL setidaknya, Anda harus memuat dan mengelola tekstur, dan ketika Anda menggambar mereka, Anda harus mendapatkan geometri yang benar. Lapisan wrapper memecahkan masalah ini.

Yang mengatakan, menggunakan grafis 3D back-end tampaknya memiliki lebih banyak kelebihan daripada kerugian, jadi jika Anda bertanya kepada saya, itu sepadan dengan usaha.

Tung Nguyen
sumber
1

Jika gim Anda cukup sederhana, dan Anda ingin gim ini berjalan dengan baik pada mesin kelas bawah, terutama netbook dan laptop yang lebih lama (tanpa akselerasi 3D, atau sangat minim - grafis terintegrasi Intel yang lebih tua, dll), masih layak untuk dipertimbangkan murni Pendekatan framebuffer 2D

Jika Anda senang gim membutuhkan setidaknya kartu / chip ATi / NVidia low-end, menggunakan API 3D akan memungkinkan Anda melakukan banyak hal keren (pencampuran alfa, penskalaan / rotasi, dll.) Yang akan sulit untuk melakukannya dengan baik / efisien dalam renderer perangkat lunak murni.

Perlu diketahui juga bahwa beberapa hal yang sangat sederhana dalam 'pure 2D' menjadi lebih menarik ketika perangkat keras 3D (dan bilinear filtering / alpha blending) terlibat. Memahami konsep alfa yang diultipultiplikasikan. Dan juga pikirkan, misalnya, bagaimana Anda akan menangani jahitan di antara ubin dalam tilemap 2D jika Anda menginginkan tampilan yang dapat diperbesar / diputar.

Ingat juga bahwa laju pembuatan terbatas. Dan secara mengejutkan mudah untuk mencapai batas tersebut dalam 2D. Anda mungkin tidak memiliki banyak poligon, tetapi jika Anda menginginkan banyak lapisan paralaks alfa, partikel, atau efek pos - Anda dapat dengan mudah mengisi piksel sebanyak permainan 3D yang cukup canggih.

Tetapi secara umum, perangkat keras 3D luar biasa, dan campuran aditif adalah teman Anda :)

bluescrn
sumber