Anda di halaman 1dari 23

UNIVERSITAS GUNADARMA

FAKULTAS TEKNOLOGI INDUSTRI


TEKNIK INFORMATIKA
UNIVERSITAS GUNADARMA
2014
Game Engine Panda3D
Nama : M !nd" A# Fa$a% &'4411()2*
P+a,e$"a An!g+a% -e+dian &''411''.*
P!+nama A/adi &')411201)
Ke#a, : 3IA2'
Game Engine Panda3D
Pada tugas softskil kali ini saya akan mereview sedikit tentang game engine, yang saya
akan review yaitu game engine Panda3D. Panda3D adalah mesin permainan yang mencakup
grafis, audio, I / O, tabrakan, dan kemampuan lain yang relevan dengan penciptaan game 3D.
Panda3D adalah open source dan, pada ! "ei, ##! perangkat lunak bebas di bawah revisi
lisensi $%D. &ilis sebelum ! "ei ##! tidak dianggap 'ree %oftware karena kesalahan tertentu
dalam desain lisensi Panda3D tua. "eskipun demikian, rilis ini lebih tua dari Panda3D (uga
dapat digunakan untuk kedua pengembangan game gratis dan komersial tanpa biaya keuangan.
Dimaksudkan Panda3D ini permainan pengembangan bahasa Python. "esin itu sendiri
ditulis dalam ) * * , dan menggunakan sebuah otomatis wrapper+generator untuk mengekspos
fungsi lengkap dari mesin dalam antarmuka Python. Pendekatan ini memberikan pengembang
keuntungan dari pengembangan Python, seperti perkembangan pesat dan mana(emen memori
ma(u, namun tetap kiner(a bahasa disusun dalam inti mesin. "isalnya, mesin yang terintegrasi
dengan kolektor sampah Python, dan struktur mesin secara otomatis dikelola.
,he manual dan contoh program menggunakan Python, meskipun pengembang beker(a pada
mener(emahkan manual untuk ) * * dan menyediakan ) * * sampel program.
%eorang pengembang menggunakan Panda3D biasanya menulis kode di Python, tetapi (uga
memungkinkan untuk langsung mengakses mesin menggunakan ) * * code.
Para pengguna Panda3D termasuk pengembang dari beberapa game komersial besar, sebuah
proyek sumber terbuka beberapa, dan se(umlah program universitas yang memanfaatkan kurva
bela(ar pendek Panda3D itu. "asyarakat kecil tapi aktif, dan pertanyaan pada forum umumnya
men(awab dengan cepat.
Desain
Panda3D adalah mesin grafik adegan. Ini berarti bahwa dunia maya ini awalnya kosong
)artesian ruang men(adi yang menyisipkan permainan programmer model 3D. Panda3D tidak
membedakan antara -besar- model 3D, seperti model dari pen(ara seluruh atau pulau, dan -kecil-
model 3D, seperti model me(a atau pedang. "odel baik besar dan kecil yang dibuat dengan
menggunakan program pemodelan standar seperti $lender , 3ds "a. atau "aya , dimuat ke
Panda3D, dan kemudian dimasukkan ke dalam ruang )artesian.
/rafik adegan Panda3D mengekspos fungsi Open/0 dan Direct1 dalam bentuk yang cukup
literal. "isalnya, Open/0 dan Direct1 keduanya memiliki kemampuan kabut. 2ntuk
mengaktifkan kabut di Panda3D, satu hanya menyimpan parameter kabut pada node dalam
grafik adegan. Parameter kabut sama persis dengan parameter panggilan setara dalam 3PI yang
mendasarinya. Dengan cara ini, Panda3D dapat dilihat sebagai pembungkus tipis sekitar 3PI
tingkat rendah. Dimana hal itu berbeda dari mereka adalah bahwa ia menyimpan adegan,
sedangkan Open/0 dan Direct1 tidak. ,entu sa(a, itu (uga menyediakan tingkat yang lebih
tinggi operator, seperti memuat model, melaksanakan animasi, mendeteksi tabrakan, dan
se(enisnya.
Panda3D pertama direkayasa sebelum adanya shader verte. dan pi.el. Ini diperoleh
dukungan untuk shader manual ditulis pada tahun ##4. 5amun, pengguna telah lambat untuk
meningkatkan modern yang per+pi.el teknik pencahayaan dalam permainan mereka. Para
pengembang berteori bahwa ini adalah karena program shader bisa sangat sulit, dan bahwa
pengembang game banyak ingin mesin untuk menangani secara otomatis.
2ntuk memperbaiki situasi ini, para pengembang Panda3D baru+baru ini diberikan Panda3D
kemampuan untuk mensintesis shader otomatis. %intesis ini ter(adi (ika pemodel 3D menandai
model untuk per+pi.el pencahayaan, atau (ika pemodel menerapkan peta normal, peta, gloss diri
iluminasi peta, atau kemampuan lain yang melebihi kemampuan dari pipa fi.ed+fungsi. ,u(uan
dari sintesis ini adalah untuk membuat model sebagai modeler dimaksud, tanpa intervensi dari
programmer.
5on+/raphical 6emampuan
Panda3D menyediakan kemampuan selain render 3D. 6epala di antara ini adalah 7
+ 6iner(a alat analisis.
+ 8ksplorasi grafik alat adegan.
+ Debugging alat.
+ %ebuah seni pipa ekspor / impor lengkap.
+ 3D 3udio, baik menggunakan '"OD , Open30 atau %istem %uara "iles .
+ Deteksi tabrakan. + 'isika sistem, dan integrasi penuh untuk "esin Dynamics ,erbuka ,
eksperimental Phys1 dan integrasi $ullet.
+ 6eyboard dan dukungan "ouse.
+ Dukungan untuk I / O device.
+ 5egara yang terbatas mesin.
+ /2I, integrasi lib&ocket.
+ 9aringan.
+ 6ecerdasan buatan.
%e(arah
,he Disney studio :& adalah cabang dari Disney yang diciptakan untuk membangun
atraksi 3D untuk taman hiburan Disney. "ereka membangun daya tarik yang disebut -"agic
)arpet 3ladin,- dan mesin yang mereka buat untuk itu akhirnya men(adi Panda3D. "esin dalam
bentuk yang sekarang sedikit beruang kemiripan kepada tahun+tahun awal. %eiring waktu,
Panda3D digunakan untuk naik :& tambahan di taman hiburan Disney, dan akhirnya digunakan
dalam penciptaan ,oontown online , game online diatur dalam dunia kartun, dan kemudian
untuk kedua ""O&P/ , Pirates of the )aribbean online.
Pada tahun ##, mesin dirilis sebagai open source. "enurut penulis, ini adalah agar mereka
-bisa lebih mudah beker(a dengan universitas pada proyek+proyek penelitian :irtual &eality.-
5amun, butuh beberapa waktu untuk Panda3D untuk lepas landas sebagai proyek open+source.
Dari artikel7
%istem ini, meskipun cukup digunakan oleh tim yang mengembangkan itu, tidak cukup
-open source siap.- 3da beberapa pengguna yang tertarik, tetapi membangun dan memasang
sistem itu sangat kompleks, dan ada sedikit di (alan dokumentasi atau kode sampel, sehingga
tidak ada komunitas sumber terbuka yang signifikan segera.
5amun, terbuka+sumber dari mesin diperbolehkan )arnegie "ellon Pusat ,eknologi ;iburan
untuk bergabung dalam pengembangan mesin. %ementara Disney insinyur terus melakukan
sebagian besar pembangunan, tim )arnegie "ellon+membangun peran untuk dirinya sendiri
polishing mesin untuk konsumsi publik, menulis dokumentasi, dan menambahkan beberapa fitur
high+end seperti shader.
5ama Panda3D yang pernah akronim7 -3gnostic platform (aringan 3rsitektur ,ampilan.-
5amun, karena frase yang telah kehilangan sebagian besar maknanya, kata -Panda3D- (arang
dianggap sebagai akronim lagi.
%oftware 0isensi
Pada tahun ##, ketika mesin itu open source, tu(uan dari pengembang adalah untuk
menciptakan sebuah 'ree %oftware lisensi. 5amun, lisensi memiliki beberapa kekurangan yang
membuatnya non+'ree7 bisa dibilang diperlukan mengirimkan perubahan Panda. Pro(ect <
Disney.com, dan secara eksplisit melarang ekspor perangkat lunak untuk berbagai bangsa
terhadap mana 3merika %erikat memiliki embargo perdagangan.
Pada &abu "ei !, ##!, batang pembangunan Panda3D beralih ke lisensi $%D. 5amun, rilis
lama masih menggunakan lisensi lama.
Panda3D membuat penggunaan beberapa perpustakaan pihak ketiga yang i=innya (uga tidak 'ree
%oftware , termasuk '"OD , 5vidia )g , Direct1 , dan "'). %ebagian besar dari modul ini
dapat dengan mudah dikeluarkan dari instalasi, namun.
Mend!1!ng 2+3$313# 4!55e+
%aya ingin bicara se(enak tentang dukungan protokol buffer baru dalam versi pengembangan
terbaru dari Panda3D. Ini bukan fitur yang sangat menarik, tetapi dapat men(adi salah satu yang
penting, terutama (ika 3nda menggunakan Panda3D bersama+sama dengan perpustakaan lain
seperti 5umPy atau (ika 3nda perlu untuk melakukan banyak operasi tingkat rendah pada tekstur
atau data geometri dari Python. 5amun, sebagian besar kasus penggunaan tidak akan
memerlukan fungsi ini.
,he Python penyangga protokol adalah cara untuk aplikasi Python untuk mendapatkan hook
langsung ke ) / ) * * memori, array pada khususnya. 6elas Panda3D yang mendukungnya
memberikan pointer ke memori yang mendasari untuk interpreter Python bersama dengan
pen(elasan tentang bagaimana data diletakkan di memori. Deskripsi ini diperlukan untuk Python
untuk mengetahui bagaimana untuk mengakses dan menyalin informasi.
Dimulai dengan Python .>, 3nda dapat menggunakan built+in (enis multiview untuk mengakses
memori yang mendasari obyek mengekspos antarmuka penyangga. 3nda kemudian dapat
memanipulasi data dengan mengubahnya men(adi daftar atau ob(ek array.array, menciptakan
sub+pandangan dan beroperasi pada mereka, menulis atau membaca bagian ke file, atau bahkan
hanya memodifikasi memori langsung seolah+olah itu biasa daftar Python.
%aat ini, satu+satunya kelas Panda3D yang mengekspos antarmuka penyangga
/eom:erte.3rrayData dan Pointer,o3rray ?yang terakhir yang digunakan untuk tu(uan
penyimpanan array yang paling di Panda3D, termasuk tekstur@, tetapi lebih kelas dapat dengan
mudah ditambahkan pada permintaan. %ebaliknya, Panda memungkinkan mengambil ob(ek
penyangga yang sudah ada ?seperti dari array.array atau array 5umPy@ sebagai sumber data
untuk tekstur atau array data verte..
%aat menyalin data ke perpustakaan lain seperti 5umPy, hal ini dapat membantu mengurangi
operasi copy yang tidak perlu. %aat ini, 3nda akan memanggil metode seperti getAdata ?@ untuk
membuat ) * * string, yang merupakan salah satu operasi copy sudah, yang kemudian akan
dibungkus ke dalam string Python, yang adalah hal lain. 3khirnya, 3nda akan melewati string
ini ke 5umPy, yang akan melakukan setidaknya satu operasi copy untuk menyalin ke
representasi sendiri. ,api karena 5umPy (uga mendukung protokol penyangga, 3nda sekarang
dapat menyalin isi dari tekstur atau dari array data verte. langsung ke array 5umPy tanpa
operasi copy yang tidak perlu.
%atu kasus penggunaan menarik lainnya untuk fitur ini adalah manipulasi cepat dan efisien data
verte. dan data tekstur dari Python. Daripada harus membuat /eom:erte.&ewriter atau
P5"Image untuk memodifikasi data masing+masing, kini 3nda dapat membuat memoryview
untuk iterate atas data secara langsung, dengan mudah menyalin subset sekitar, atau halaman
mereka keluar ke disk. Dalam kasus penggunaan saya sendiri, yang melibatkan banyak generasi
geometri dan manipulasi, fleksibilitas ini memungkinkan saya untuk secara dramatis mengurangi
waktu yang dihabiskan menghasilkan geometri dan meratakannya. 3kses langsung ke memori
(uga memungkinkan saya untuk cepat potongan halaman data geometri ke disk dan kembali ke
dalam memori bila diperlukan.
Protokol penyangga menyediakan banyak fleksibilitas akses memori tingkat rendah tanpa
terkena semua seluk+beluk ) / ) * * memori mana(emen. %ecara khusus, data referensi dihitung,
sehingga 3nda tidak perlu khawatir tentang menghapus data. 3nda harus sebenarnya mampu
men(aga multiviews sekitar untuk konsumsi non+langsung, namun perlu diingat bahwa 3nda
mungkin masih perlu memberitahu Panda3D ketika 3nda telah memodifikasi data kemudian
?misalnya dengan panggilan eksplisit tambahan untuk modifyAramAimage ?@@. 'itur ini akan
tersedia dalam B.C.# rilis Panda3D %D6.
Tiga 1a#i #i2a$ 5+ame +a$e Anda6
%ecara historis, Panda selalu men(alankan single+core. Dan meskipun basis kode Panda3D telah
ditulis untuk memberikan multithreaded benar, dukungan multi+processor bila disusun dalam,
secara default kita telah menyediakan versi Panda dibangun dengan apa yang disebut -benang
sederhana- model yang memaksa satu+ modus pengolahan inti, bahkan pada mesin multi+core.
,api semua itu berubah.
Dimulai dengan Panda3D mendatang versi B.!, kita akan mulai mendistribusikan Panda dengan
benang benar diaktifkan dalam membangun, yang memungkinkan 3nda untuk mengambil
keuntungan dari paralelisasi yang benar pada setiap modern, mesin multi+core. ,entu sa(a, (ika
3nda ingin menggunakan threading secara langsung, 3nda akan harus berurusan dengan isu+isu
kompleksitas coding, seperti kebuntuan dan kondisi ras, yang selalu datang bersama dengan hal
semacam ini. Dan interpreter Python masih fundamental single+core, sehingga kode yang benar+
benar paralel harus ditulis dalam ) * *.
,api, lebih menggairahkan, kami (uga memungkinkan fitur baru opsional dalam mesin Panda3D
sendiri, untuk membuat rendering ?yang semua ) * * code@ di(alankan sepenuhnya pada sub+
benang, memungkinkan kode Python 3nda untuk men(alankan sepenuhnya paralel dengan
rendering proses, mungkin dua kali lipat frame rate 3nda. ,api bahkan melangkah lebih (auh
dari itu. 3nda berpotensi dapat membagi seluruh frame ke tiga core yang berbeda, mencapai
paralelisasi belum pernah ter(adi sebelumnya dan peningkatan kiner(a 3. teoritis ?meskipun,
secara realistis, B.4. . lebih mungkin@. Dan semua ini ter(adi tanpa coding upaya khusus pada
bagian 3nda, pengembang aplikasi+3nda hanya perlu menyalakannya.
$agaimana cara ker(anyaD
2ntuk menggunakan fitur ini berhasil, 3nda akan perlu memahami sesuatu tentang cara
ker(anya. Pertama, pertimbangkan Panda normal, single+threaded membuat pipa. Eaktu yang
dihabiskan memproses setiap frame dapat dibagi lagi men(adi tiga fase yang terpisah, yang
disebut -3pp-, -menyisihkan-, dan -Draw-7
app, pemusnahan, draw
Dalam nomenklatur Panda, -3pp- adalah setiap waktu yang dihabiskan dalam aplikasi sendiri,
yaitu program anda. Ini adalah lingkaran utama 3nda, termasuk kode Python ?atau ) * * code@
3nda menulis untuk mengontrol logika game tertentu 3nda. ;al ini (uga termasuk perhitungan
Panda berbasis yang harus dilakukan serentak dengan kode aplikasi iniF misalnya, tabrakan
traversal biasanya dianggap sebagai bagian dari 3pp.
-"enyisihkan- dan -"enggambar- adalah dua fase mesin rendering utama Panda. %etelah kode
aplikasi 3nda selesai mengeksekusi untuk frame, maka )ull mengambil alih. 5ama
-menyisihkan- menyiratkan pandangan+frustum pemusnahan, dan ini adalah bagian dari ituF
tetapi (uga banyak lagi. 'ase ini meliputi semua proses grafik adegan yang diperlukan untuk
mengidentifikasi benda+benda yang akan diberikan frame ini dan negara mereka saat ini, dan
semua proses yang diperlukan untuk menempatkan mereka ke dalam daftar memerintahkan
untuk menggambar. "enyisihkan biasanya (uga termasuk waktu untuk menghitung karakter
animasi. Output dari )ull adalah daftar diurutkan ob(ek dan negara+negara terkait untuk dikirim
ke kartu grafis.
-Draw- adalah tahap akhir dari proses rendering, yang tidak lebih dari ber(alan melalui daftar
ob(ek output dengan menyisihkan, dan mengirim mereka satu per satu untuk kartu grafis. ;asil
imbang ini dirancang untuk men(adi sebagai ringan mungkin pada )P2F idenya adalah untuk
men(aga perintah pipa grafis diisi dengan banyak perintah render karena akan terus. Draw adalah
satu+satunya tahap proses di mana perintah grafis yang benar+benar dikeluarkan.
3nda dapat melihat waktu aktual yang dihabiskan dalam tiga fase (ika 3nda memeriksa
pelaksanaan program 3nda melalui alat P%tats. %etiap aplikasi yang berbeda, tentu sa(a, tapi
dalam banyak aplikasi cukup kompleks, waktu yang dihabiskan di masing+masing tiga fase mirip
dengan orang lain, sehingga tiga fase kira+kira membagi total waktu bingkai men(adi tiga bagian.
%ekarang bahwa kita memiliki kerangka waktu dibagi men(adi tiga bagian yang lebih+atau+
kurang sama, kode pipa ulir dapat berlaku, dengan memisahkan setiap tahap ke dalam thread
yang berbeda, sehingga dapat di(alankan ?berpotensi@ pada )P2 yang berbeda, seperti ini 7
app, menyisihkan, menarik benang terpisah
Perhatikan bahwa 3pp tetap pada pertama, atau main benangF kita hanya pindah )ull dan Draw
ke thread terpisah. ;al ini penting, karena itu berarti bahwa semua kode aplikasi 3nda dapat
terus men(adi single+threaded ?dan karena itu (auh lebih mudah dan lebih cepat untuk
mengembangkan@. ,entu sa(a, ada (uga tidak ada yang mencegah 3nda menggunakan benang
tambahan di 3pp (ika 3nda ingin ?dan (ika 3nda memiliki cukup tambahan )P2 untuk
membuatnya berharga@.
9ika memisahkan fase ke benang yang berbeda adalah semua yang kita lakukan, kita tidak akan
mencapai sesuatu yang berguna, karena setiap fase masih harus menunggu untuk tahap
sebelumnya untuk menyelesaikan sebelum dapat melan(utkan. ,idak mungkin untuk
men(alankan menyisihkan untuk mencari tahu hal+hal apa yang akan diberikan sebelum fase 3pp
telah selesai mengatur adegan grafik dengan benar. Demikian pula, tidak mungkin untuk
men(alankan "enggambar sampai tahap menyisihkan selesai memproses grafik adegan dan
membangun daftar ob(ek.
5amun, setelah 3pp selesai diproses frame B, tidak ada alasan untuk itu thread untuk duduk+
duduk menunggu untuk sisa frame yang akan selesai menggambar. ;al ini dapat pergi ke depan
dan mulai beker(a pada frame , pada saat yang sama bahwa benang menyisihkan mulai
memproses frame B. Dan kemudian pada saat menyisihkan selesai diproses frame B, dapat mulai
beker(a pada pemusnahan bingkai ?yang (uga memiliki 3pp baru sa(a selesai dengan@. Puting
itu semua dalam bentuk grafis, kerangka waktu sekarang terlihat seperti ini7
%epenuhnya dipentaskan membuat pipa
9adi, kita melihat bahwa kita sekarang dapat engkol keluar frame sampai tiga kali lebih cepat
daripada di aslinya, single+threaded kasus. %etiap frame sekarang mengambil (umlah waktu yang
sama, total, sebagai terpan(ang asli tiga fase. ?Dengan demikian, speedup maksimum teoritis 3.
hanya dapat dicapai dalam praktek (ika semua tiga fase yang persis sama pan(ang.@
Ini perlu menun(ukkan bahwa satu+satunya hal yang kita telah meningkat di sini adalah bingkai G
,hroughput G+(umlah frame per detik bahwa sistem dapat membuat. Pendekatan ini tidak apa+
apa untuk meningkatkan bingkai G latency G, atau total waktu yang berlalu antara waktu
beberapa perubahan yang ter(adi dalam permainan, dan waktu yang muncul pada layar. Ini
mungkin men(adi salah satu alasan untuk menghindari pendekatan ini, (ika latency lebih penting
daripada throughput. 5amun, kita masih berbicara tentang total latency yang biasanya kurang
dari B##ms atau lebih, yang lebih cepat daripada waktu respon manusia pulaF dan sebagian besar
aplikasi ?termasuk game@ dapat mentolerir se(umlah kecil latency seperti ini dalam pertukaran
untuk halus, frame rate yang cepat.
3gar semua ini beker(a, Panda harus melakukan beberapa trik pintar di belakang layar. ,rik yang
paling penting adalah bahwa perlu ada tiga salinan yang berbeda dari adegan grafik di negara
bagian yang berbeda dari modifikasi. 6arena proses 3pp 3nda bergerak node sekitar untuk
frame 3, misalnya, )ull masih menganalisis bingkai , dan harus mampu menganalisis grafik
adegan G sebelum G apa pun di 3pp mulai penyia+nyiaan waktu untuk membuat frame 3. 9adi
perlu ada . salinan lengkap dari grafik adegan disimpan sebagai akhir 3pp frame Panda
melakukan peker(aan yang cukup baik untuk melakukan hal ini secara efisien, bergantung pada
kenyataan bahwa sebagian besar hal+hal yang sama dari satu frame ke yang berikutnyaF tapi
masih ada beberapa overhead untuk semua ini, sehingga keuntungan total kiner(a selalu agak
kurang dari 3. speedup teoritis. %ecara khusus, (ika aplikasi sudah ber(alan cepat ?>#fps atau di
atas@, maka keuntungan dari paralelisasi kemungkinan akan dikerdilkan oleh persyaratan
overhead tambahan. Dan, tentu sa(a, (ika aplikasi 3nda sangat sepihak, sehingga hampir semua
waktunya dihabiskan di 3pp ?atau, sebaliknya, hampir semua waktunya dihabiskan pada Draw@,
maka 3nda tidak akan melihat banyak manfaat dari ini trik.
9uga, perhatikan bahwa tidak mungkin lagi untuk apa pun di 3pp untuk menghubungi kartu
grafis secara langsungF sementara 3pp ber(alan, kartu grafis sedang dikirim perintah gambar dari
dua frame lalu, dan 3nda tidak dapat dipercaya mengganggu ini tanpa mengambil kiner(a hit
besar. 9adi ini berarti bahwa Open/0 callback dan se(enisnya harus peka terhadap sifat threaded
pipa grafis. ?Inilah sebabnya mengapa antarmuka Panda untuk (endela grafis memerlukan
panggilan tidak langsung7. $ase.win.reHuestProperties ?@, daripada base.win.setProperties ?@ Ini
diperlukan karena permintaan properti+perubahan harus ditangani oleh thread menarik.@
Pengadopsi awal diundang untuk mencoba fitur baru ini keluar hari ini, sebelum kami secara
resmi merilis B,!. Ini sudah tersedia dalam rilis buildbot saat iniF untuk menyalakannya, lihat
halaman manual baru pada sub(ek. "arilah kita tahu tanggapan 3ndaI "asih mungkin kinks
untuk beker(a keluar, (adi kami ingin tahu seberapa baik beker(a untuk 3nda.
Panda3D dan 7"$%3n
Ini adalah tentang bagaimana untuk mempercepat 3nda 6ode Python, dan tidak berdampak
langsung pada kiner(a Panda3D itu. 2ntuk sebagian besar proyek, sebagian besar waktu eksekusi
adalah di dalam Panda3D di ) * * atau /P2, (adi tidak peduli apa yang 3nda lakukan,
memperbaiki Python 3nda tidak akan membantu. 2ntuk kasus+kasus lain di mana 3nda perlu
untuk mempercepat kode Python 3nda, )ython dapat membantu. ;al ini terutama ditu(ukan
kepada orang+orang yang lebih memilih pemrograman Python, tapi tahu setidaknya sedikit
tentang ). %aya tidak akan membahas bagaimana melakukan optimasi dalam Python, meskipun
(ika artikel ini adalah relevan bagi 3nda, 3nda benar+benar harus melihat ke dalamnya.
)ython adalah bahasa pemrograman yang menarik. Ini menggunakan versi diperpan(ang sintaks
python untuk memungkinkan hal+hal seperti variabel statis diketik, dan panggilan langsung ke )
* * perpustakaan. )ython mengkompilasi kode ini ke ) * *. ,he ) * * kemudian
mengkompilasi sebagai modul ekstensi python yang 3nda dapat mengimpor dan menggunakan
seperti modul python biasa. 3da beberapa manfaat untuk ini, tetapi dalam konteks kita yang
utama adalah kecepatan. 6ode )ython benar ditulis bisa secepat kode ), yang dalam beberapa
kasus tertentu bisa bahkan B### kali lebih cepat daripada kode python hampir identik. 2mumnya
3nda tidak akan melihat B###. kecepatan meningkat, tetapi dapat cukup sedikit. Ini
menyebabkan modul untuk hanya beker(a pada platform mereka dikumpulkan, (adi 3nda akan
perlu untuk mengkompilasi versi alternatif untuk platform yang berbeda.
%ecara default, )ython mengkompilasi ke ), tapi versi baru #,B3 mendukung ) * *. Ini lebih
berguna karena 3nda mungkin menggunakan setidaknya satu ) * * perpustakaan, Panda3D.
%aya memutuskan untuk mencoba ini, dan setelah tersandung pada masalah sederhana, saya
mendapatkannya beker(a, dan aku bahkan tidak tahu ) * *.
%ebelum saya masuk ke rincian, saya akan men(elaskan mengapa 3nda mungkin ingin
menggunakan )ython, daripada port kemacetan kiner(a untuk ) * * dengan tangan. "anfaat
utama adalah dalam proses, serta keahlian yang diperlukan. 9ika 3nda memiliki basis besar
Python kode untuk sebuah proyek, dan 3nda memutuskan beberapa hal perlu men(adi (auh lebih
cepat, 3nda memiliki beberapa pilihan. Pendekatan umum tampaknya untuk bela(ar ) * *,
pelabuhan kode, dan bela(ar bagaimana membuatnya sehingga 3nda dapat antarmuka untuk itu
dari python. Dengan )ython, 3nda hanya dapat menambahkan beberapa (enis definisi variabel di
mana 3nda perlu peningkatan kiner(a, dan kompilasi yang memberi 3nda modul Python yang
beker(a seperti yang 3nda miliki. 9ika 3nda perlu untuk mempercepat kode yang interface
dengan Panda3D, 3nda dapat menukar panggilan Python 3PI untuk ) * * yang. "enggunakan
)ython memungkinkan 3nda untuk hanya menempatkan usaha dalam mempercepat bagian dari
kode yang 3nda butuhkan untuk beker(a, dan untuk melakukannya tanpa harus mengubah sangat
banyak. ;al ini sangat berbeda dari membolos semua kode dan reimplementing itu bahasa lain.
;al ini (uga mengharuskan 3nda untuk bela(ar (umlah yang cukup minimal barang. 3nda (uga
bisa men(aga kebaikan dari sintaks Python yang mungkin Python coders telah datang untuk
menghargai.
"asih ada alasan utama untuk benar+benar kode dalam ) * * ketika beker(a dengan Panda, tapi
sebagai seseorang yang tidak melakukan coding di ) * *, saya tidak akan berbicara tentang hal
itu banyak. 9ika 3nda ingin langsung memperpan(ang atau berkontribusi Panda3D, ingin
menghindari berlebihan menetapkan impor 3nda dari file header ?)ython akan meminta 3nda
untuk menentukan kembali bagian+bagian dari 3PI yang 3nda gunakan bukan hanya
menggunakan file header dikirimkan dengan Panda@, atau 3nda hanya memilih ) * *, ) * *
mungkin men(adi pilihan yang lebih baik. 3ku terutama melihat )ython sebagai pilihan yang
nyaman ketika 3nda berakhir perlu mempercepat bagian dari Python kode+dasarF bagaimanapun,
adalah praktis untuk melaksanakan proyek+proyek besar dari awal di )ython.
)ython memang memiliki beberapa kelemahan (uga. ;al ini masih dalam pengembangan lebih
awal. Ini berarti 3nda akan menemukan bug di pener(emah serta kode yang dihasilkan. ;al ini
(uga tidak memiliki dukungan untuk fitur Python beberapa, seperti sebagian besar menggunakan
generator. %ecara umum saya tidak punya banyak masalah dengan masalah ini, tapi pengalaman
3nda mungkin berbeda.
)ython tidak menawarkan manfaat sisi menarik (uga. ;al ini memungkinkan 3nda untuk
opsional statis (enis variabel dan dengan demikian dapat mendeteksi lebih banyak kesalahan
pada waktu kompilasi daripada Python.
2ntuk memulai, pertama+tama 3nda perlu menginstal )ython #,B3 ?atau mungkin versi yang
lebih baru@. 9ika 3nda memiliki )ython menginstal 3nda dapat memeriksa versi dengan
perintah+:. 3nda dapat mengambil sumber dari situs )ython, dan menginstalnya dengan
men(alankan -python setup.py install- dari direktori sumber )ython. 3nda (uga akan perlu
memiliki sebuah kompiler. %itus )ython akan membantu 3nda mendapatkan setup segalanya
(ika 3nda membutuhkan bimbingan tambahan.
"aka 3nda harus mencoba sampel untuk memastikan bahwa 3nda memiliki semua yang 3nda
butuhkan, dan bahwa itu semua beker(a. 3da bagus ) * * sampel untuk )ython pada )ython
Eiki. ?Ini beker(a untuk saya pada "ac, dan Eindows menggunakan "in/E atau "%:)
sebagai kompilator@.
%eperti untuk beker(a dengan Panda3D, ada beberapa hal yang saya temukan7
3da keuntungan kiner(a yang signifikan yang bisa didapat dengan hanya menyusun modul
Python yang ada sebagai )ython. Dengan peker(aan tambahan sedikit menambahkan variabel
diketik statis, 3nda dapat memiliki keuntungan kiner(a yang lebih besar bahkan tanpa pindah ke
Panda ) * * 3PI ?Jang berarti 3nda tidak perlu khawatir tentang menghubungkan terhadap
Panda3D yang dapat men(adi masalah@.
Panda3D sudah memiliki binding python dengan mana(emen memori yang baik, (adi saya
sarankan instancing semua benda menggunakan python 3PI, dan hanya beralih ke ) * * satu
sesuai kebutuhan.
3nda dapat menggunakan KiniK properti pada ob(ek Python Panda3D untuk mendapatkan
pointer ke ) * * ob(ek yang mendasari. Pada mac, 3nda perlu memastikan libpanda ?dan
beberapa kasus, mungkin orang lain (uga@ dimuat sebelum mengimpor modul ekstensi 3nda (ika
3nda menggunakan salah satu perpustakaan Panda3D itu.
Pada Eindows, 3nda perlu menentukan perpustakaan 3nda butuhkan ketika kompilasi ?dalam
kasus saya, hanya libpanda@. ,he ) * * kelas dan kelas Python cenderung memiliki nama yang
sama. 2ntuk mengatasi ini, 3nda dapat menggunakan -dari . impor y sebagai =- ketika
mengimpor yang python, atau 3nda hanya dapat mengimpor panda3d.core, dan menggunakan
nama lengkap dari kelas ?seperti panda3d.core./eom@. "ungkin ada cara untuk mengubah nama
) * * kelas pada impor (uga. 9ika menggunakan Panda3D ) * * 3PI pada Eindows, 3nda
akan perlu menggunakan compiler "%:). 3nda bisa mendapatkan "icrosoft :isual %tudio
##! 8.press 8dition secara gratis yang meliputi dibutuhkan compiler.
Dengan menggunakan teknik ini saya mendapat peningkatan kiner(a B#. pada kode saya untuk
memperbarui posisi verte. di /eom saya. Ini menghindari keharusan untuk membuat ob(ek
python untuk semua verte.es dan melewati mereka melalui 3PI Python yang diter(emahkan
mereka kembali ke ) * * ob(ek. Itu hanya masalah bergerak lebih satu panggilan di dalam loop
ke 3PI lain. Ini, bagaimanapun, dilakukan dalam sudah dioptimalkan kode )ython yang hanya
memuat posisi verte. disimpan dalam blok memori ke dalam /eom. 6ebanyakan kasus
penggunaan mungkin akan melihat sedikit manfaat. 6eseluruhan meskipun, saya mendapatkan
banyak kiner(a baik dari perubahan ke )ython, dan dari perubahan ke ) * * 3PI. Perubahan ini
hanya diperlukan perubahan yang relatif kecil untuk bagian kritis kecepatan kode python saya
yang sudah ada.
%aya membuat contoh yang agak minimal menggunakan panggilan Panda3D ) * * 3PI dari
)ython. ,empatkan setup.py dan file testc.py. dalam direktori yang sama, dan dari direktori
tersebut, (alankan setup.py dengan Python 3nda menginstal 3nda gunakan dengan Panda3D.
9ika semuanya sudah dikonfigurasi dengan benar, ini harus mengkompilasi contoh )ython
modul, testc.py., untuk modul ekstensi python dan men(alankannya. 9ika berhasil, ia akan
mencetak beberapa baris diakhiri dengan -selesai-. 6emungkinan 3nda mungkin perlu men+
tweak (alan di setup.py. 9ika tidak pada "ac atau Eindows, 3nda akan mendapatkan error
menun(ukkan di mana 3nda harus memasukkan pengaturan compiler 3nda ?kebanyakan hanya
(alan untuk perpustakaan Panda3D s@.
%aya ingin mengucapkan terima kasih 0isandro Dalcin dari )ython+Pengguna mailing list yang
membantu saya mendapatkan ini beker(a pada Eindows.
-a+d8a+e Ge3me$+i In,$an9ing
$aru+baru ini, saya telah beker(a pada demo "edan ,ak ,erbatas kecil yang men(elaskan
bagaimana untuk mengambil keuntungan penuh dari kemampuan daerah Panda3D itu. Dalam
proses ini saya telah menambahkan berbagai fitur untuk Panda3D yang akan membuat lebih
mudah bagi saya, termasuk banyak perbaikan untuk %hader /enerator. ?Pada sidenote, saya tidak
berakhir membutuhkan setiap shader untuk medan.@
%enin lalu, saya menambahkan pohon untuk medan. 6arena ini merupakan demo medan tak
terbatas, saya perlu untuk menambahkan cukup (umlah pohon yang. ,api saya menemukan
bahwa ?bahkan dengan kemampuan merata Panda3D s@ /P2 saya dengan cepat let me down
setelah beberapa ribu pohon. 9adi, aku sadar aku butuh untuk menambahkan geometri dukungan
instancing ke Panda3D.
Dan (adi saya lakukan. ,ernyata cukup sepele untuk melaksanakan dan hanya membawa saya
satu atau dua (am. ;asilnya cukup menyenangkanI %aya telah berhasil membuat lebih dari
B##### pohon ?dan medan besar@ pada saat yang sama pada framerate yang wa(arI $erikut
adalah screenshot dari apa yang tampak seperti sekarang7 screenshot+,ue+Dec++BL+4+4L+
##C+>M
,entu sa(a, adegan EIP bisa menggunakan banyak perbaikan, tetapi 3nda mendapatkan poin
saya. Dan dengan beberapa pemusnahan yang tepat dan 0OD, aku bisa mendorong (umlah pohon
yang lebih tinggi.,api tidak Panda3D sudah mendukung instancingD
%aat ini, Panda3D mendukung instancing model animasi. Itu sama sekali tidak terkait geometri
instancing. %istem instancing yang ada hanya ada untuk meningkatkan kiner(a (ika 3nda
memiliki banyak model animasi, dengan mengurangi (umlah pemindahan titik yang dilakukan
oleh sistem animasi Panda3D itu. /eometri instancing, di sisi lain, ada untuk mengurangi (umlah
data yang dilewatkan ke kartu video. 3pakah model animasi atau tidak adalah tidak relevan
dengan sistem instancing baru.$agaimana cara ker(anyaD
%ebelum kemarin, (ika 3nda ingin membuat beberapa contoh model, 3nda akan baik memuat
model beberapa kali atau menggunakan )opy,o. %aya telah melihat bahwa banyak orang
menggunakan instance,o dalam hal ini, tapi itu tidak akan berpengaruh positif pada kiner(a
untuk model statis. /eometri masih akan melewati banyak kali untuk /P2, yang merupakan
proses yang lambat.
Dengan sistem baru, 3nda tetap hanya satu salinan dari model dan memanggil setInstance)ount
?n@ di atasnya. Ini berarti bahwa itu akan tetap diteruskan ke /P2 hanya sekali, tetapi akan
diberikan n kali.
3nda mungkin bertanya+tanya, bagaimana cara memberikan setiap parameter yang berbeda node
atau posisi yang berbedaD 5ah, yang bisa dilakukan di shader. 3nda dapat mengakses instance
ID di shader dan menghitung posisi, warna, dll berdasarkan itu, atau hanya menggunakan
berbeda model proyeksi matriks dari array mengubah matriks yang lolos ke shader. ;al ini
memungkinkan 3nda untuk melakukan dasarnya apapun. 3nda dapat mengirim bola tunggal
untuk /P2, melewati tekstur 3D dengan peta perpindahan di setiap lapisan, dan mengatur
misalnya menghitung sampai B#L. Itu akan menghasilkan B.#L batu yang unik dengan
menggunakan hanya satu batch panggilan dan (umlah yang sangat terbatas geometri upload .
Ini meninggalkan pertanyaan apakah ini benar+benar akan beker(a tanpa menggunakan shader.
9awabannya adalah tidak, aku takut. 3da ekstensi Open/0 yang memungkinkan 3nda untuk
menggunakan geometri instancing dengan pipa tetap+fungsi, tetapi sangat sedikit video card
mendukungnya. 6arena itu akan sangat rumit untuk menerapkan itu, saya memutuskan untuk
tidak melakukannya.
)atatan bahwa ini hanya didukung dalam Open/0 se(auh ini. "ungkin seseorang akan
menambahkan dukungan untuk ini untuk Direct1 sisi Panda suatu hari nanti.
Si,$em Im23+ !n$!1 7 : : m3d!#
%aya baru sa(a memeriksa dukungan untuk baru Kpanda3dK modul mengkilap yang lebih baik
mengatur ) * * kelas Panda3D. 'itur ini telah diminta untuk sementara waktu sekarang karena
banyak yang terganggu dengan pan(ang, terorganisir dan impor melalui pandac.Panda"odules.
Pada dasarnya, sekarang memungkinkan 3nda untuk mengimpor kelas Panda3D seperti ini7
dari panda3d.egg 8ggData impor
dari panda3d.ode impor Ode9oint
dari panda3d.core impor G
Si,$em ,aa$ ini
3da se(umlah Panda3D pustaka dinamis yang berisi modul Python, misalnya libp3direct,
libpandae.press, libpanda, libpandaegg dan libpandaode. 3nda dapat langsung mengimpor
mereka dari Python dengan mengimpor mereka dengan nama perpustakaan mereka, dan dengan
demikian mengakses kelas dibungkus dan fungsi perpustakaan ini menghadapkan ke )Python.
5amun, tidak semua fungsi untuk kelas+kelas diimplementasikan dalam ) * *. 3da banyak
fungsi yang diimplementasikan dalam Python yang menyediakan fungsi tambahan ke ) * *
kelas. "etode tersebut hanya metode kemudahan untuk membuat hidup 3nda lebih mudah, atau
ada untuk membuat antarmuka yang lebih Pythonic. $eberapa metode ini telah usang dalam
mendukung pelaksanaan itu pada ) * * sisi ?atau alat pembungkus pembangkit, menginterogasi.@
'ungsi ekstensi ini didefinisikan dalam pandac / libname"odules.py, di mana KlibnameK adalah
nama dari perpustakaan yang bersangkutan. %etelah 3nda mengimpor pandac /
Panda"odules.py, kode Python diimpor dari semua perpustakaan Panda3D, dan fungsi ekstensi
ditambahkan ke kelas.
'ungsi ekstensi bukan satu+satunya alasan mengapa KpandacK pohon ada. %aya baru sa(a
mengatakan bahwa 3nda dapat langsung mengimpor perpustakaan yang dinamis dari Python,
tapi itu tidak sepenuhnya benar + tidak mungkin lagi, karena dari Python .4, pada "ac dan
Eindows. ?Pada Eindows, 3nda masih dapat mengimpor dengan mengubah nama dll ke dalam
PJD, tapi trik itu tidak beker(a untuk "ac O%1 dylibs.@
Oleh karena itu, kita perlu secara manual mengimpor perpustakaan dengan menempatkan
terlebih dahulu dan kemudian langsung memuatnya melalui fungsi loadAdynamic dalam modul
imp Python. 6ode untuk melakukan ini telah ditambahkan ke KpandacK, karena itu adalah tempat
di mana perpustakaan Panda3D biasanya diimpor.
%istem baru
Dalam sistem yang baru, bukannya mengimpor kelas yang bersangkutan dari
pandac.Panda"odules, 3nda akan mengimpor kelas dari submodule dari modul Kpanda3dK.
6ami tidak kelompok kelas oleh direktori source mereka, seperti yang diusulkan.
Pengorganisasian modul Kpanda3dK sedemikian rupa bahwa sub+paket merupakan direktori
sumber akan membuatnya sia+sia rumit. %ebaliknya, kami memilih untuk kelas kelompok oleh )
* * perpustakaan dinamis. 5ama submodule didefinisikan dengan nama perpustakaan tanpa
-libpanda- atau -libp3- awalan. "isalnya, peta libpandaegg untuk panda3d.egg, dan libp3direct
peta untuk panda3d.direct.
3da satu pengecualian untuk libpanda dan libpandae.press perpustakaan, mereka tergabung
dalam satu modul, panda3d.core. 6ami memilih untuk melakukan ini karena libpanda dan
libpandae.press berisi pembungkus Python untuk inti Panda3D + 3nda akan perlu perpustakaan
ini untuk melakukan sesuatu yang berguna dengan Panda3D. %elain itu, perbedaan antara
libpanda dan libpandae.press adalah sewenang+wenang dan tidak berarti bagi pengembang.
6etika lebih banyak perpustakaan yang ditambahkan kemudian, seperti libpandaphys., dan
libpandaai, kita hanya bisa menambahkan mereka ke dalam daftar.
3dapun pohon langsung, kami telah meninggalkannya di tempat itu. Ia telah mengemukakan
bahwa digabung ke dalam modul panda3d, tapi kami memutuskan untuk tidak melakukannya,
karena akan men(adi sia+sia rumit dan membingungkan. %elain itu, saya pikir ada manfaat dalam
men(aga modul Python Panda3D dan ) * * modul terpisah.
6ami melakukan mengakui penamaan malang pohon langsung, dan kami mungkin mengubah
bahwa untuk masa mendatang, tapi itu akan men(adi perubahan besar.
%istem impor baru semua dibundel ke dalam satu file, panda3d.py. Ini gan(il dari Python ilmu
hitam tidak semua yang diperlukan + ini menempatkan perpustakaan Panda3D, menambahkan
lokasi mereka ke (alur perpustakaan sistem, modul register palsu, dan dinamis beban
perpustakaan diperlukan ketika seseorang mulai menggunakan kelas dari itu.
3dapun fungsi ekstensi Python, mereka tidak didukung dalam sistem yang baru. 3lasan untuk
ini adalah bahwa kita mencoba untuk fase keluar, dan mencoba untuk memindahkan sebagian
besar fungsi ke ) * * sisi Panda3D.
'itur lain yang keren adalah bahwa modul Kpanda3dK menerapkan sistem malas+loading untuk itu
perpustakaan. Itu berarti bahwa perpustakaan hanya akan di+load ketika 3nda benar+benar
menggunakan salah satu kelas itu. ;al ini memiliki keuntungan bahwa perpustakaan 3nda tidak
menggunakan tidak akan dimuat, yang dapat mengakibatkan kecepatan sedikit dan mendapatkan
memori.
3lasan
%ekarang, mengapa kita melakukannyaD %elain fakta bahwa telah diminta beberapa kali, ada
beberapa manfaat untuk itu. Pertama+tama, itu lebih terorganisir, memungkinkan orang untuk
mengetik lebih cepat dan lebih mudah, dan itu mengarah pada kode bersih. %elain itu, 3nda tidak
mengimpor perpustakaan 3nda tidak perlu, yang mengarah ke sedikit lebih cepat kali impor, dan
penggunaan memori yang lebih sedikit. ,api yang lebih penting lagi, karena kita
membutuhkannya untuk sistem plugin / runtime.
8h, apa, mengapaD 3ku akan men(elaskan. 6etika 3nda mendistribusikan game yang dapat
digunakan dengan runtime Panda3D ?baik itu plugin browser, atau baik itu runtime mandiri@,
3nda pak ke file P3D.. 'ile P3D. 3kan menun(ukkan versi Panda3D itu dibangun untuk. 6etika
seseorang men(alankan file P3D. "elalui runtime, runtime mendownload membangun ultra+
dioptimalkan kecil Panda3D untuk men(alankan paket P3D disediakan..
Paket Panda3D ini yang di+download oleh runtime harus sekecil mungkin. 6arena seluruh
Panda3D membangun akan mengandung komponen besar yang tidak setiap pertandingan akan
menggunakan, kita telah memisahkan mereka ke dalam paket terpisah. "isalnya, -panda3d-
paket berisi inti, -telur- paket berisi libpandaegg ?biasanya, permainan dikemas hanya akan
berisi file. $am, (adi ini biasanya tidak diperlukan@, libpandaode, sebuah -model- paket berisi
default model, satu paket per perpustakaan audio, dll file P3D. dapat menun(ukkan yang paket
itu tergantung pada, sehingga ukuran download disimpan ke minimum.
Jang memberikan masalah dengan sistem lama impor pandac.Panda"odules+gaya, meskipun.
Pertama+tama, pandac.Panda"odules impor setiap perpustakaan tunggal, sementara itu tidak
men(amin bahwa semua perpustakaan pada sistem ?seperti file P3D. "ungkin tidak perlu
beberapa dari mereka@. 6ami harus menempatkan ;acky penangan Import8rror pengecualian
dalam Panda"odules.py untuk beker(a di sekitar itu.
%elain itu, dengan sistem lama, kita tidak memiliki kontrol lagi atas kelas diimpor. "engapa kita
perlu ituD 5ah, game ini memiliki kemampuan untuk men+download dan menginstal komponen
lebih Panda3D ketika sedang ber(alan. Dengan sistem baru, ketika misalnya komponen -telur-
terinstal, kita dapat dengan mudah menambahkan hook ke dalam Kpanda3d.eggK modul secara
otomatis diperbarui dengan perpustakaan libpandaegg diinstal baru. ;al ini memungkinkan
developer game untuk men(aga waktu pra+2pload untuk minimum dengan menginstal paket
pada permintaan ?misalnya, (ika hanya bagian dari permainan menggunakan OD8 fisika,
pengembang dapat memilih untuk memiliki paket KodeK diinstal setiap kali akhir+the pengguna
memilih untuk men(alankan bagian dari permainan.@
$agaimana hal itu mempengaruhi 3nda
9ika 3nda masih ter(aga setelah membaca semua itu, 3nda mungkin bertanya+tanya apa yang
akan ter(adi pada semua kode yang sudah ada. 3pakah ini memecahkan apa punD 9awabannya
adalah, tidak. %ekarang, itu hanya file Python kecil yang saya menambahkan, yang
memungkinkan 3nda untuk mengimpor kelas Panda3D menggunakan konvensi yang berbeda.
Ini masih eksperimental, sehingga KpandacK pohon masih ada, dan bahkan tidak ditinggalkan.
6etika, mungkin setelah seri B.M rilis, sistem baru telah diu(i secara menyeluruh dan terbukti
beker(a lebih baik, kita bisa beralih kode Python dan contoh program ke sistem baru, dan
merekomendasikan orang untuk menggunakannya.
,api (ika 3nda tidak merasa seperti switching, (angan khawatir. %eperti kita peduli tentang
kompatibilitas ke belakang, dan karena sebagian besar dari kode ini sangat tergantung pada
struktur lama, struktur KpandacK mungkin akan sekitar untuk waktu loooong.
)ontoh
0ast but not least, beberapa contoh impor menun(ukkan 3nda sedikit cara ker(anya7
dari panda3d.egg 8ggData impor
dari panda3d impor ode
bersama N ode.Ode9oint
dari panda3d.core impor G
te. N ,ekstur ?@
te..read ?'ilename ?-img.png-@@
impor panda3d.directival N panda3d.direct.)Interval ?@
P#!gin 4+38,e+ dan ,am2ing man5aa$n"a
6ebanyakan orang tahu bahwa ada proyek dilakukan untuk membangun sebuah plugin browser
untuk Panda3D. %aya telah beker(a keras pada proyek itu selama beberapa minggu terakhir, dan
sekarang sudah hampir selesai, meskipun masih ada lebih banyak peker(aan untuk pergi. 6ami
akan menargetkan B.M.#, atau setidaknya B.M.B, dengan rilis pertama dari upaya ini.
%aya pikir ini akan men(adi waktu yang baik untuk men(elaskan apa, tepatnya, Panda akan
mendapatkan sebagai hasil dari semua ini.
Plugin browser
Pertama, ada yang sudah (elas7 3nda akan dapat men(alankan aplikasi Panda3D 3nda sebagai
(endela tertanam dalam browser. )ukup menanamkan (endela Panda3D di browser secara teknis
sangat mudahF kami memiliki ker(a ini dalam beberapa hari setelah memulai proyek. 6ita dapat
ber(alan pada setiap browser utama pada platform Panda3D didukung7 I8 pada Eindows, atau
'irefo. pada Eindows, "ac, dan 0inu., belum lagi %afari, )hrome, Opera, dan mungkin
beberapa browser yang lebih fiddly bahwa saya belum diu(i belum. Pada setiap browser, dan
pada setiap platform, menggunakan kemampuan hardware penuh kartu grafis 3nda, dan ber(alan
pada frame rate penuhF tidak perlu terbatas pada software rendering. ?"ungkin ada sedikit
dampak pada kiner(a kecil pada platform tertentu, tetapi masih, itu cara yang lebih cepat daripada
perangkat lunak rendering.@ ,api kemudian ada pertanyaan besar tentang bagaimana 3nda
mendapatkan kode 3nda ke sebuah halaman web di tempat pertamaD 'ile P3D
2ntuk mengatasi itu, kita perlu alat untuk paket aplikasi 3nda men(adi sebuah file download
yang nyaman. 6ami telah memiliki dasar+dasar alat tersebut untuk sementara waktu sekarang,
tapi sekarang itu (auh lebih fleshed keluar. Ia beker(a semacam packpanda tidak, tapi bukannya
membangun file e.e, itu paket aplikasi 3nda ke dalam sebuah file P3D. Pikirkan hal ini seperti
'lash file swf dikompilasi. %ekarang, 3nda dapat menanamkan file P3D 3nda dalam halaman
web dengan beberapa baris ;,"0 sintaks, sangat mirip dengan cara 3nda menanamkan file
'lash swf, dan ada aplikasi Panda3D 3nda bermain di halaman webI
'ile P3D berisi semua yang anda butuhkan untuk men(alankan aplikasi 3nda. 9adi mengapa kita
harus membatasi diri untuk men(alankan file P3D hanya pada web browserD "ari kita tidak.
6ami (uga akan mendistribusikan e.ecutable mandiri yang disebut panda3d.e.e ?atau hanya
panda3d pada "ac dan 0inu.@, yang dapat digunakan untuk men(alankan file P3D pada desktop
3nda, tidak ada browser yang diperlukan.
Panda3D runtime
0ihatlah apa yang ter(adiI ,iba+tiba, packpanda tidak lagi diperlukan. $ahkan (ika 3nda tidak
pernah berencana untuk menanamkan aplikasi 3nda pada halaman web, 3nda dapat pak ke file
P3D, dan mendistribusikan file bukan e.ecutable yang packpanda akan diproduksi. 'ile P3D
lebih baik dari file e.e, karena ?a@ itu (auh lebih kecil, yang berisi aplikasi 3nda sa(a, dan bukan
salinan lain dari Panda, dan ?b@ itu platform+independen ?disediakan aplikasi 3nda ditulis dengan
Python murni@.
%iapapun yang menerima berkas P3D 3nda bisa klik dua kali pada icon tersebut, dan (ika mereka
telah menginstal runtime Panda3D, tidak peduli apa O% mereka ber(alan, akan meluncurkan dan
men(alankan dengan salinan lokal mereka panda3d.e.e. 9ika 3nda ingin mendistribusikannya
kepada orang+orang yang mungkin belum memiliki runtime Panda3D, 3nda dapat mengarahkan
mereka link pada panda3d.org untuk menginstalnya, atau ?(ika 3nda mendistribusikan (udul )D+
&om, misalnya@, 3nda dapat mengirim salinan runtime Panda3D bersama dengan permainan dan
menginstalnya secara otomatis. ;al ini mirip dengan cara permainan mendistribusikan runtime
Direct1 dari "icrosoft. Pengguna yang menerima permainan 3nda pada )D tidak perlu tahu
bahwa mereka men(alankan Panda3D, meskipun mereka masih men(alankan permainan 3nda
dari file P3D.
Integrasi iPhone
Ini layak disebutkan secara sepintas, (uga, bahwa ketika upaya plugin browser ini dilakukan dan
saya mendapatkan kesempatan untuk menin(au kembali dukungan iPhone, maka saya akan dapat
menulis Panda3D ini runtime untuk iPhone (uga, yang akan memutar file P3D yang sama yang
bermain di desktop 3nda. ?&ealistis, 3nda masih perlu untuk menyempurnakan permainan untuk
membuatnya beker(a dengan baik pada iPhone. 6iner(a &endering dan antarmuka persyaratan
yang sangat berbeda pada iPhone daripada mereka pada P) 3nda. ,api teknologi yang
mendasari akan sama, dan beberapa game sederhana dapat beker(a tidak berubah pada kedua
platform.@ %ayangnya, 3pple memiliki aturan lucu tentang aplikasi yang men(alankan aplikasi
lain, (adi ini aplikasi Panda3D runtime tidak akan dii=inkan pada iPhone non+9ailbroken. 2ntuk
tinggal di dalam saluran yang sah, kami (uga akan menyediakan cara untuk mengkompilasi file
P3D men(adi benar, app iPhone benar+benar mandiri yang dapat didistribusikan melalui 3pp
%tore dan diinstal ke setiap iPhone. ?Ini (uga akan mengharuskan 3nda untuk membayar biaya
3pple O B## pengembang, tentu sa(a.@
6eamanan web
%ekarang, kembali ke plugin browser, dan file P3D. %aya belum berbicara tentang keamanan7
salah satu hal yang 'lash dan 9ava sangat baik di ?dan 3ctive1 sangat buruk at@ dengan aman
men(alankan kode yang tidak dipercaya pada halaman web. 6etiga teknologi ini memungkinkan
sebuah program pada halaman web untuk segera mulai ber(alan segera setelah 3nda
mengun(ungi halaman. ;al ini memiliki implikasi yang (elas untuk hacker menginstal malware
ke komputer 3nda7 sedangkan 'lash dan 9ava keduanya pergi melalui lingkaran untuk membuat
tidak mungkin untuk melakukan hal ini, 3ctive1 pada dasarnya membuka seluruh komputer
3nda untuk program apa pun halaman web ingin lari. 2ntuk mengatasi dampak dari hal ini,
"icrosoft telah secara bertahap menutup ber(alan otomatis aplikasi 3ctive1, dan sekarang secara
default meminta 3nda sebelum men(alankan program 3ctive1 untuk pertama kalinya.
9elas, kita lebih suka men(adi seperti 'lash dan 9ava dalam hal ini daripada seperti 3ctive1.
%ayangnya, ternyata bahwa Python tidak benar+benar memin(amkan dirinya untuk men(alankan
kode yang tidak dipercaya aman. ,idak seperti 'lash 3ction%cript, atau 9ava, Python tidak
pernah dirancang dari awal untuk men(adi bahasa yang aman, dan itu ridiculously penuh lubang.
Ini hampir mustahil untuk mencegah kode Python melakukan cukup banyak apa pun suka
dengan perangkat keras komputer. $enar+benar. 3da orang+orang di internet yang berpikir
Python dapat dibuat aman ?saya pernah men(adi salah satu dari mereka@, dan beberapa orang
yang berpikir mereka sudah melakukannya, tetapi untuk sebagian besar mereka keliru.
3da beberapa solusi yang mungkin untuk ini. %ebagai contoh, kita bisa men(alankan interpreter
Python sepenuhnya pada mesin virtual. Itu sulit, karena beberapa alasan, tetapi mungkin lebih
mudah di masa depan, sebagai teknologi yang matang. Pope memiliki python aman yang saya
pikir benar+benar dapat mencapai keamanan, tetapi (uga sulit untuk digunakan, dan saya tidak
yakin apa efeknya terhadap kiner(a runtime. 9uga, mungkin IronPython memegang (an(i, karena
itulah dasarnya Python ber(alan dalam lingkungan yang sudah amanF tapi sekali lagi ini adalah
perubahan besar dari )Python kita semua datang untuk mengetahui dan cinta.
%ebagai pengganti salah satu dari mereka, saya akan menerapkan sesuatu seperti model
keamanan 3ctive1, seperti lumpuh seperti itu. 3pa ini berarti bagi 3nda adalah bahwa 3nda
akan harus menandatangani file P3D 3nda ketika 3nda menempatkan mereka pada sebuah situs
web. ?-Penandatanganan- file berarti menandai dengan kunci unik yang mengidentifikasi 3nda
sebagai pengembang ,idak apa+apa (ika itu anonim,. %atu+satunya titik adalah bahwa itu unik.@
3nda dapat mendaftar semua file P3D 3nda dengan kunci yang sama. 6etika plugin web
Panda3D datang di file P3D ditandatangani dengan kunci baru itu tidak mengakui, itu akan
menawarkan pengguna pilihan apakah akan menyetu(ui kunci yang sebelum men(alankan
aplikasi. 9ika pengguna menyetu(ui kunci+yang berarti ia memberi 3nda i=in untuk men(alankan
kode pada mesin+nya maka akan men(alankan file P3D, dan akan mengingat persetu(uan
pengguna untuk file P3D masa depan ditandatangani dengan kunci yang sama. Ini pada dasarnya
adalah (enis yang sama dari persetu(uan pengguna harus memberikan untuk men+download e.e,
sehingga tidak benar+benar mengganggu distribusi aplikasi, meskipun itu tidak membuatnya
sedikit canggung (ika 3nda ingin memiliki berkas P3D 3nda bermain secara otomatis yang
pertama kali seseorang datang ke website 3nda.
3da kemungkinan lain untuk model keamanan yang berbeda di (alan, tapi saya pikir ini akan
membahas masalah ini secara memadai untuk (angka pendek.
9ava%cript integrasi
6embali ke hal yang baik. "en(alankan sebuah aplikasi di sebuah kotak kecil pada halaman web
adalah menyenangkan untuk sementara waktu, tapi itu tidak benar+benar membeli 3nda banyak
kecuali dapat berinteraksi dengan halaman web di sekitarnya.
2ntuk menempatkan ini dalam konteks7 Python dan 9ava%cript adalah bahasa yang sangat miripF
baik dukungan terlambat mengikat, penciptaan ob(ek dinamis, dan mengetik bebek. Panda sudah
cukup bagus di membungkus ) * * ob(ek untuk keuntungan PythonF dibandingkan dengan gan(il
itu, membungkus ob(ek 9ava%cript adalah angin musim panas yang hangat. 9adi mengapa tidak
melakukannya dengan benar, dan sepenuhnya mengekspos seluruh 9ava%cript ruang ob(ek untuk
mengarahkan manipulasi oleh PythonD
9adi, kita lakukan. Plugin Panda3D memungkinkan 3nda untuk menulis kode Python yang
terlihat seperti -document.get8lement$yId ?KformK@. /reeting.value N KhelloK-, yang tentu sa(a
mengubah nilai bentuk pada halaman web, menggunakan model 9ava%cript DO". ,api kau
menulis di Python. $ahkan, apa pun yang dapat melakukan 9ava%cript, program Python 3nda
bisa melakukan terlalu. Dan sebaliknya adalah benar (uga7 kami memungkinkan 3nda untuk
mengekspos ob(ek Python pilihan 3nda 9ava%cript, untuk memungkinkan halaman web untuk
langsung menyodok nilai+nilai ke dalam aplikasi 3nda, atau bahkan memanggil metode Python
3ndaI
Ini berarti 3nda dapat dengan mudah mengintegrasikan Program web Panda3D 3nda dengan
program web lainnya, yang ditulis dalam 9ava%cript atau bahasa web+lain yang didukung.
%ebagai contoh, saya telah menyediakan halaman demo yang menggambarkan Panda3D
berinteraksi dengan 'lash pada halaman yang sama bersama+sama, mengirim benda bolak+balik
antara Panda dan 'lash. 6etika plugin lebih selesai, saya akan memberikan ini halaman demo
dan lain+lain untuk pemeriksaan umum.
Paket alat
"asih ada lebih terlibat di sini. 6emasan aplikasi 3nda ke dalam sebuah file P3D tunggal semua
baik dan bagus untuk aplikasi kecil, tapi bagaimana dengan aplikasi yang benar+benar besar
seperti ""O, untuk yang Panda3D berutang asli raison dKQtre+nyaD Pengguna 3nda tidak akan
ingin men+download file ## "$ P3D setiap kali mereka ingin bermain. 9adi, kita perlu sistem
untuk kemasan potongan+potongan kecil dari kode, dan men+download mereka secara individu,
dan / atau berbagi potongan+potongan ini di antara aplikasi yang berbeda.
"asukkan sistem paket umum. 3lat yang sama yang dapat membuat file P3D (uga dapat
membangun paket umum7 koleksi kode Python, modul ekstensi dikompilasi, dan model, yang
bukan aplikasi per se, tetapi dapat diminta oleh aplikasi saat runtime dan di+download pada
permintaan. %ekarang ketika aplikasi 3nda mendapatkan besar, 3nda memiliki dua pilihan7
3nda dapat bundel men(adi satu file P3D monolitik, dan membiarkan pengguna men+download
semuanya di depanF atau 3nda dapat membuat satu file P3D kecil yang diunduh pengguna
pertama untuk mendapatkan ke dalam permainan+yang mungkin tidak lebih dari layar+dan (udul
maka 3nda strategis dapat men+download seluruh kode dalam berbagai paket, sementara
pengguna terus bermain bagian ?s@ yang telah 3nda download.
%istem paket (uga akan secara otomatis mengintegrasikan dengan Panda built+in mekanisme
patchfile, memungkinkan 3nda untuk memberikan update tanpa memaksa pengguna untuk men+
download benar+ulang seluruh aplikasi.
9uga, kita dapat menggunakan sistem ini paket yang sama untuk memberikan beberapa
perpustakaan ekstensi, seperti pygame atau w., hal+hal yang tidak ketat bagian dari Panda tetapi
banyak aplikasi akan ingin mengambil keuntungan dari.
3nda (uga dapat, tentu sa(a, model beban dan seperti langsung dari 2&0 sewenang+wenang. ,api
3nda bisa melakukan itu hari ini, dengan menggunakan vfs+mount+url )onfig.prc settingF itu
bukan fitur baru dari Panda ?meskipun tidak mengambil relevansi baru dalam pengaturan
berbasis web@.
:ersi Panda3D
6ami belum berbicara tentang berbagai versi Panda3D. Di sinilah ia mendapat yang baik7 setiap
file P3D tahu versi Panda3D yang digunakan untuk memproduksinya, dan hanya akan mencoba
untuk men(alankan dengan versi yang sama dari Panda. ,api runtime Panda3D itu sendiri versi+
independen. 6etika 3nda men(alankan file P3D khusus, runtime Panda3D akan mencari tahu apa
versi Panda diperlukan. 9ika versi yang belum diinstal pada komputer pengguna, ia akan pergi
dan men+download terlebih dahulu. Ini adalah peker(aan dari runtime Panda3D untuk mengelola
berbagai versi Panda, dan untuk men(aga mereka semua terpisah dari satu sama lainF dan hal ini
secara otomatis, tanpa pengguna bahkan perlu tahu bahwa hal itu ter(adi. $ahkan, 3nda bahkan
dapat men(alankan dua versi yang berbeda dari Panda pada saat yang sama pada halaman web
yang sama.
Ini berarti bahwa sekali 3nda, atau pengguna, telah terinstal runtime Panda3D, 3nda tidak perlu
khawatir tentang memperbarui ketika versi baru dari Panda datang. %ecara otomatis update
sendiri sesuai kebutuhan. ;al ini berlaku untuk panda3d.e.e mandiri serta untuk plugin browser.
?%etiap sesekali mungkin ada update ke runtime itu sendiri, yang akan membutuhkan update
eksplisit oleh pengguna. ,etapi upgrade dasar Panda3D atau paket yang tidak akan
membutuhkan ini.@
Perhatikan bahwa runtime Panda3D akan cache semua ini paket download pada hard disk
pengguna. ;arus ada batas untuk (umlah mengkonsumsi ruang Panda, sehingga runtime akan
memiliki untuk mengelola ruang ini dan secara otomatis menghapus yang lama, paket yang tidak
terpakai dan versi. ,api ruang yang digunakan dapat cukup besar dengan standar web browser
?disk saat ini cukup besar untuk menyimpan ratusan megabyte terselip di sudut@, dan tidak ada
alasan untuk men(e(alkan semua ini dalam direktori cache yang relatif kecil web browser.
$ahkan masih, (ika 3nda membutuhkan lebih banyak ruang untuk aplikasi 3nda dari Panda
biasanya menyediakan, 3nda dapat mengambil+ingat, pengguna telah memberikan i=in aplikasi
3nda. 7@
6ami (uga akan menyediakan halaman web yang pengguna dapat mengun(ungi mengelola / nya
instalasi Panda3D nya, pemantauan file cache dan semacamnya, dan tweaking file konfigurasi
global untuk / nya dia sukai.

Anda mungkin juga menyukai