Diberdayakan oleh Blogger.
RSS

Blogroll

Post Icon

Cloud Computing

Cloud computing adalah kumpulan dari beberapa resources yang terintegrasi menjadi satu dan digunakan melalui web. Sebenarnya, cloud computing ini didasarkan pada teknologi grid computing yang membuat skalabilitas suatu sistem komputasi menjadi sangat besar dengan cara menggabungkan beberapa sumber daya komputer menjadi satu resource. Sehingga tidak salah jika ada orang yang mengatakan cloud computing adalah grid computing yang digabungkan dengan virtualisasi.

Cloud Computing juga merupakan abstraksi dari infrastruktur kompleks yang disembunyikannya. Cloud Computing suatu metoda komputasi di mana kapabilitas terkait teknologi informasi disajikan sebagai suatu layanan (as a service),  sehingga pengguna dapat mengaksesnya lewat Internet tanpa mengetahui apa yang ada didalamnya, ahli dengannya, atau memiliki kendali terhadap infrastruktur teknologi yang membantunya.


Sejarah Cloud Computing :

Tahun 1960
John McCarthy, Pakar Komputasi dan kecerdasan buatan dari MIT. “Suatu hari nanti, komputasi akan menjadi Infrastruktur publik seperti halnya listrik dan telepon.” Ini adalah sebuah ide yang mengawali suatu bentuk komputasi yang kita kenal dengan istilah Komputasi awan.

Tahun 1995
Larry Ellison, pendiri perusahaan Oracle. “Network Computing” Ide ini sebenarnya cukup unik dan sedikit menyindir perusahaan Microsoft pada saat itu. Intinya, kita tidak harus "menanam" berbagai perangkat lunak kedalam PC pengguna, mulai dari sistem operasi hingga perangkat lunak lainya. Cukup dengan koneksi dengan server dimana akan disediakan sebuah environment yang mencakup berbagai kebutuhan PC pengguna.
Pada era ini juga wacana “Network Computing” cukup populer. Banyak perusahaan yang menggalang sistem ini contohnya Sun Mycrosystem dan Novell Netware. Disayangkan kualitas jaringan komputer saat itu masih belum memadai, penggunapun cenderung memilih PC karena cenderung lebih cepat.

Akhir Era -90
Lahir konsep ASP (Application Service Provider) yang ditandai dengan kemunculan perusahaan pusat pengolahan data. Ini merupakan sebuah perkembangan pada kualitas jaringan komputer. Akses untuk pengguna menjadi lebih cepat.

Tahun 2000
Marc Benioff, mantan wakil presiden perusahaan Oracle. “salesforce.com” ini merupakan sebuah perangkat lunak CRM dengan basis SaaS (Software as a Service). Tak disangka gebrakan ini mendapat tanggapan hebat. Sebagai suksesor dari visi Larry Ellison, boss-nya. Dia memiliki sebuah misi yaitu “The End of Software”.

2005 - Sekarang


Cloud Computing sudah semakin meningkat popularitasnya, dari mulai penerapan sistem, pengunaan nama, dll. Amazon.com dengan EC2 (Elastic Computer Cloud); Google dengan Google App. Engine; IBM dengan Blue Cord Initiative; dsb. Perhelatan cloud computing meroket sebagaimana berjalanya waktu. Sekarang, sudah banyak sekali pemakaian sistem komputasi itu, ditambah lagi dengan sudah meningkatnya kualitas jaringan komputer dan beragamnya gadget yang ada. Contoh dari pengaplikasianya adalah Evernote, Dropbox, Google Drive, Sky Drive, Youtube, Scribd, dll.



Cara kerja sistem Cloud Computing

Sistem Cloud bekerja menggunakan internet sebagai server dalam mengolah data. Sistem ini memungkinkan pengguna untuk login ke internet yang tersambung ke program untuk menjalankan aplikasi yang dibutuhkan tanpa melakukan instalasi. Infrastruktur seperti media penyimpanan data dan juga instruksi/perintah dari pengguna disimpan secara virtual melalui jaringan internet kemudian perintah – perintah tersebut dilanjutkan ke server aplikasi. Setelah perintah diterima di server aplikasi kemudian data diproses dan pada proses final pengguna akan disajikan dengan halaman yang telah diperbaharui sesuai dengan instruksi yang diterima sebelumnya sehingga konsumen dapat merasakan manfaatnya.



Contohnya lewat penggunaan email seperti Yahoo ataupun Gmail. Data di beberapa server diintegrasikan secara global tanpa harus mendownload software untuk menggunakannya. Pengguna hanya memerlukan koneksi internet dan semua data dikelola langsung oleh Yahoo dan juga Google. Software dan juga memori atas data pengguna tidak berada di komputer tetapi terintegrasi secara langsung melalui sistem Cloud menggunakan komputer yang terhubung ke internet.


Layanan Cloud Computing

Di dalam cloud computing layan terhadap user dibagi menjadi 3 :
Infrastructure as a Service (IaaS)
Infrastructure as a Service adalah layanan komputasi awan yang menyediakan infrastruktur IT berupa CPU, RAM, storage, bandwith dan konfigurasi lain. Komponen-komponen tersebut digunakan untuk membangun komputer virtual. Komputer virtual dapat diinstal sistem operasi dan aplikasi sesuai kebutuhan. Keuntungan layanan IaaS ini adalah tidak perlu membeli komputer fisik sehingga lebih menghemat biaya. Konfigurasi komputer virtual juga bisa diubah sesuai kebutuhan. Misalkan saat storage hampir penuh, storage bisa ditambah dengan segera. Perusahaan yang menyediakan IaaS adalah Amazon EC2, TelkomCloud dan BizNetCloud.

Platform as a Service (PaaS)
Platform as a Service adalah layanan yang menyediakan computing platform. Biasanya sudah terdapat sistem operasi, database, web server dan framework aplikasi agar dapat menjalankan aplikasi yang telah dibuat. Perusahaan yang menyediakan layanan tersebutlah yang bertanggung jawab dalam pemeliharaan computing platform ini. Keuntungan layanan PaaS ini bagi pengembang adalah mereka bisa fokus pada aplikasi yang mereka buat tanpa memikirkan tentang pemeliharaan dari computing platform. Contoh penyedia layanan PaaS adalah Amazon Web Service dan Windows Azure.

Software as a Service (SaaS)
Software as a Service adalah layanan komputasi awan dimana kita bisa langsung menggunakan aplikasi yang telah disediakan. Penyedia layanan mengelola infrastruktur dan platform yang menjalankan aplikasi tersebut. Contoh layanan aplikasi email yaitu gmail, yahoo dan outlook sedangkan contoh aplikasi media sosial adalah twitter, facebook dan google+. Keuntungan dari layanan ini adalah pengguna tidak perlu membeli lisensi untuk mengakses aplikasi tersebut. Pengguna hanya membutuhkan perangkat klien komputasi awan yang terhubung ke internet. Ada juga aplikasi yang mengharuskan pengguna untuk berlangganan agar bisa mengakses aplikasi yaitu Office 365 dan Adobe Creative Cloud.

Keamanan Data

berikut ini adalah beberapa yang harus diperhatikan guna menjaga keamanan data kita yang tersimpan di cloud computing :

  • Proteksi Data

Ketika kita sudah memutuskan untuk adopsi atau migrasi data ke Cloud, yang yang diperhatikan adalah bagaimana penyedia layanan Cloud memberikan proteksi terhadap data kita. Dengan metode apa mereka melakukan proteksi sehingga kita yakin data aman, selain itu lokasi penyimpanan data juga adalah pertimbangan penting dimana ini hubungannya dengan Data Center. Dipastikan data center yang mereka buat sudah tersertifikasi/teraudit, misalnya lokasi bebas gempa, standar sumber saya listrik 3 lapis dll.

  • Security Control

Setelah data kita betul-betul terproteksi, selanjutnya adalah bagaimana keamanan dari akses terhadap data kita (role), bagaimana prosedurnya sehingga hanya orang-orang yang berhak saja yang bisa akses data kita. Disini teramsuk akses para pekerja/karyawan di penyedia layanan terhadap data kita.

  • Compliance

Standar yang diterapkan pada penyedia layanan Cloud Computing, misalnya untuk keamanan data menggunakan ISO 27001, untuk penyediaan layanan memakai ITIL, COBIT, Cloud Security Alliance, termasuk regulasi internasioanl dan pemerintah. Sehingga jika ada pelanggaran akan mudah dalam penyelesaian

  • Multi-tenancy

Salah satu sifat Cloud computing adalah resource sharing, nah bagaimana ketika ada penyewa lain terdapat melakukan kecurangan atau bocor, apa imbasnya terhadap data kita disana, ini harus dipertimbangkan. Karena secara fisikal, data kita bisa jadi ada dalam satu media fisik yang sama dengan yang lain.

  • Security Governance

Ini lebih kepada policy governance dari penyedia layanan atau kita sebagai pemakai layanan, harus dijabarkan dan governance-nya paka apa harus didefinisikan disni.

Kelebihan dan Kekurangan

di sisi lain dari kecanggihan dan kemudahan cloud computing , juga terdapat beberapa kekurangan yang dapat membebani pengguna itu sendiri . berikut ini adalah beberapa kelebihan dan kekurangan dari cloud computing :


KEUNGGULAN CLOUD COMPUTING SISTEM


Uraian mengenai keuntungan (sisi potensial) yang didapat dalam penggunaan Cloud Computing. Namun, secara spesifik, merujuk kepada (Thia, 2008) keuntungan Cloud Computing antara lain:
(1) Keuntungan bagi para pelaku bisnis adalah minimalisasi biaya investasi infrastruktur publik sehingga bisnis bisa lebih terfokus pada aspek fungsionalitasnya,
(2) Bagi application developer, layanan PaaS memungkinkan pengembangan dan implementasi aplikasi dengan cepat sehingga meningkatkan produktivitas,
 (3) Bagi para praktisi yang bergerak di industri TI, hal ini berarti terbukanya pasar baru bagi industri jasa pengembangan teknologi informasi,
(4) Bagi pebisnis di bidang infrastruktur, hal ini merupakan peluang yang besar karena dengan meningkatnya penggunaan layanan SaaS ini akan meningkatkan penggunaaan bandwidth internet,
(5) Integrasi aplikasi dengan berbagai perangkat

KEKURANGAN CLOUD COMPUTING

Merujuk kepada (Robbins, 2009), resiko yang harus dihadapi user dalam penggunaan Cloud Computing ini antara lain:
(1) service level, artinya kemungkinan service performance yang kurang konsisten dari provider. Inkonsistensi cloud provider ini meliputi, data protection dan data recovery,
(2) privacy, yang berarti adanya resiko data user akan diakses oleh orang lain karena hosting dilakukan secara bersama-sama,
(3) compliance, yang mengacu pada resiko adanya penyimpangan level compliance dari provider terhadap regulasi yang diterapkan oleh user,
(4) data ownership mengacu pada resiko kehilangan kepemilikan data begitu data disimpan dalam cloud,
(5) data mobility, yang mengacu pada kemungkinan share data antar cloud service dan cara memperoleh kembali data jika suatu saat user melakukan proses terminasi terhadap layanan cloud Computing.


Beberapa pertimbangan lain yang menjadi resiko Cloud Computing adalah:

- Ketidakpastian kemampuan penegakan kebijakan keamanan pada provider

- Kurang memadainya pelatihan danTI

- Patut dipertanyakan kendali akses istimewa pada situs provider

- Ketidakpastian untuk memulihkan data

- Kedekatan data pelanggan lain sehingga kemungkinan tertukar

- Ketidakpastian kemampuan untuk mengaudit operator

- Ketidakpastian keberlanjutan keberadaan provider

- Ketidakpastian kepatuhan provider terhadap peraturan.

Aplikasi Cloud Computing 

Beberapa aplikasi yang menggunakan sistem cloud computing :


  1. Google Drive


 Google Drive adalah layanan penyimpanan Online yang dimiliki Google. Google Drive diluncurkan pada tanggal 24 April 2012. Sebenarnya Google Drive merupakan pengembangan dari Google Docs. Google Drive memberikan kapasitas penyimpanan sebesar 5GB kepada setiap penggunanya. Kapasitas tersebut dapat ditambahkan dengan melakukan pembayaran atau pembelian Storage. Penyimpanan file di Google Drive dapat memudahkan pemilik file dapat mengakses file tersebut kapanpun dan dimanapun dengan menggunakan komputer desktop, laptop, komputer tablet ataupun smartphone. File tersebut juga dapat dengan mudah dibagikan dengan orang lain untuk berbagi pakai ataupun melakukan kolaborasi dalam pengeditan.

Fitur-fitur Google Drive


  • Penyimpanan gratis sebesar 5GB


Google Drive memberikan fasilitas penyimpanan sebesar 5GB kepada penggunanya dengan cuma-cuma untuk menyimpan dokumen, baik berupa gambar, video, musik, ataupun file-file lain.


  • Memungkinkan membuat dokumen


Pada fitur ini Google Drive memungkinkan para penggunanya untuk membuat dokumen, seperti mengolah data, mengolah angka, membuat presentasi, form dan dokumen lainnya.


  • Berbagi file


Google Drive memudahkan untuk berbagi file dengan orang lain, dan juga memudahkan orang lain untuk melakukan pengeditan terhadap file yang kita buat.


  • Terintegrasi dengan layanan Google lainnya


Para pengguna layanan Google lainnya akan merasakan kemudahan dalam memanagement file dari Google Drive. Karena Google Drive secara otomatis terintegrasi dengan layanan google lainnya.


  • Fasilitas pencarian


Google Drive memberikan layanan pencarian yang lebih baik dan lebih cepat untuk para penggunanya dengan menggunakan kata kunci tertentu. Google Drive juga dapat mengenali gambar atau teks dari dokumen hasil scan.


  • Menampilkan berbagai file


Lebih dari 30 type file yang dapat dibuka dan ditampilkan oleh Google Drive, termasuk file video, file image, dan lain-lain tanpa mengharuskan pengguna untuk mengunduh dan menginstal software yang sesuai dengan tipe atau ekstensi file tersebut.


  • Menjalankan aplikasi


Google Drive juga mempunyai kemampuan untuk membuat, menjalankan dan membagi file aplikasi favorit yang dimiliki oleh pengguna.

     
      2. Windows Azure


Windows Azure adalah sistem operasi yang berbasis komputasi awan, dibuat oleh Microsoft untuk mengembangkan dan mengatur aplikasi serta melayani sebuah jaringan global dari Microsoft Data Centers. Windows Azure yang mendukung berbagai macam bahasa dan alat pemograman. Sistem operasi ini dirilis pada 1 Februari 2010.

Fitur-fitur Windows Azure


  • Layanan Infrastruktur


Windows Azure menyediakan infrastruktur dengan skala yang sesuai dengan kebutuhan. Baik dalam membuat aplikasi baru atau menjalankan aplikasi yang telah disediakan.


  • Kembangkan dan Lakukan Percobaan


Windows Azure memungkinkan pengguna untuk melakukan pengembangan aplikasi dan langsung melakukan percobaan pada aplikasi tersebut secara cepat.


  • Big Data


Windows Azure menyediakan kapasitas data yang besar. Kapasitas ini didukung oleh Apache Hadoop.


  • Aplikasi Mobile


Windows Azure memberikan kemudahan dalam pembuatan aplikasi mobile. Aplikasi yang telah dibuat dan dapat langsung dimasukan ke penyimpanan komputasi awan.


  • Media


Layanan Media Windows Azure memperbolehkan untuk mengembangkan solusi penyebaran media, yang mana bisa menampilkan media dari Adobe Flash, Android, iOS, Windows, dan platform lainnya


  • Aplikasi Web


Windows Azure menawarkan keamanan dan fleksibilitas pengembangan, penyebaran, dan pilihan skala untuk berbagai macam ukuran aplikasi web.


  • Penyimpanan, Pencadangan, dan Pemulihan


Windows Azure menyediakan penyimpanan, pencadangan, dan solusi pemulihan data apapun.


  • Identitas dan Manajemen Akses


Windows Azure Active Directory memberikan layanan pengamanan pada identitas perusahaan. Serta melakukan manajemen pada banyak pengguna di sebuah perusahaan.


  • Integrasi


Windows Azure memperbolehkan pengguna untuk membawa seluruh aplikasi, data, perangkat, mitra ke perangkat lokal dan ke awan.


  • Manajemen Data


Windows Azure menyediakan solusi yang tepat untuk kebutuhan data pengguna.



Sumber :

http://id.wikipedia.org/wiki/Komputasi_awan

http://pusatteknologi.com/pengertian-manfaat-cara-kerja-dan-contoh-cloud-computing.html 

http://www.cloudindonesia.or.id/mengenal-layanan-salesforce-com.html

http://sraportofolio.blogspot.com/2013/03/kelebihan-dan-kekurangan-cloud-computing.html

http://www.slideshare.net/herwinanggeriana/book-of-cloud-computing  

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS
Post Icon

Komputasi Modern

Komputasi modern adalah sebuah konsep sistem yang menerima intruksi-intruksi dan menyimpannya dalam sebuah memory, memory disini bisa juga dari memory komputer. Oleh karena pada saat ini kita melakukan komputasi menggunakan komputer maka bisa dibilang komputer merupakan sebuah komputasi modern. Konsep ini pertama kali digagasi oleh John Von Neumann (1903-1957). Beliau adalah ilmuan yang meletakkan dasar-dasar komputer modern. Von Neumann telah menjadi ilmuwan besar abad 21. Von Neumann memberikan berbagai sumbangsih dalam bidang matematika, teori kuantum, game theory, fisika nuklir, dan ilmu komputer yang di salurkan melalui karya-karyanya . Beliau juga merupakan salah satu ilmuwan yang terkait dalam pembuatan bom atom di Los Alamos pada Perang Dunia II lalu. Kegeniusannya dalam matematika telah terlihat semenjak kecil dengan mampu melakukan pembagian bilangan delapan digit (angka) di dalam kepalanya.

Dalam kerjanya komputasi modern menghitung dan mencari solusi dari masalah yang ada, dan perhitungan yang dilakukan itu meliputi:

1. Akurasi (big, Floating point)
2. Kecepatan (dalam satuan Hz)
3. Problem Volume Besar (Down Sizzing atau pararel)
4. Modeling (NN & GA)
5. Kompleksitas (Menggunakan Teori big O)


Sejarah Komputasi Modern

      Dalam perkembangan komputasi modern, kita tidak bisa melupakan begitu saja orang dibalik perkembangan komputasi modern yang merubah semua pekerjaan jadi lebih mudah. Sejarah komputasi dimulai dari seseorang ilmuan yang ternama di bidang teknologi. Permulaan komputasi modern dimulai pada saat tahun 1926 oleh ilmuan yang berasal dari hungaria yang bernama John Von Neumann.



             Von Neumann seorang ilmuan yang belajar dari Berlin dan Zurich dan mendapatkan diploma pada bidang teknik kimia pada tahun 1926. Pada tahun yang sama dia mendapatkan gelar doktor pada bidang matematika dari Universitas Budapest. Berkat keahlian dan kepiawaiannya Von Neumann dalam bidang teori game yang melahirkan konsep seluler automata, teknologi bom atom, dan komputasi modern yang kemudian melahirkan komputer. Kegeniusannya dalam matematika telah terlihat semenjak kecil dengan mampu melakukan pembagian bilangan delapan digit (angka) di dalam kepalanya. Setelah mengajar di Berlin dan Hamburg, Von Neumann pindah ke Amerika pada tahun 1930 dan bekerja di Universitas Princeton serta menjadi salah satu pendiri Institute for Advanced Studies. Dipicu ketertarikannya pada hidrodinamika dan kesulitan penyelesaian persamaan diferensial parsial nonlinier yang digunakan, Von Neumann kemudian beralih dalam bidang komputasi. Sebagai konsultan pada pengembangan ENIAC, dia merancang konsep arsitektur komputer yang masih dipakai sampai sekarang. Arsitektur Von Nuemann adalah komputer dengan program yang tersimpan (program dan data disimpan pada memori) dengan pengendali pusat, I/O, dan memori. berdasarkan beberapa definisi di atas, maka komputasi modern dapat diartikan sebagai suatu pemecahan masalah berdasarkan suatu inputan dengan menggunakan algoritma dimana penerapannya menggunakan berbagai teknologi yang telah berkembang seperti komputer.

Berikut ini beberapa contoh komputasi modern sampai dengan lahirnya ENIAC :
1. Konrad Zuse’s electromechanical “Z mesin”.Z3 (1941) sebuah mesin pertama menampilkan biner aritmatika, termasuk aritmatika floating point dan ukuran programmability. Pada tahun 1998, Z3 operasional pertama di dunia komputer itu di anggap sebagai Turing lengkap.
2. Berikutnya Non-programmable Atanasoff-Berry Computer yang di temukan pada tahun 1941 alat ini menggunakan tabung hampa berdasarkan perhitungan, angka biner, dan regeneratif memori kapasitor.Penggunaan memori regeneratif diperbolehkan untuk menjadi jauh lebih seragam (berukuran meja besar atau meja kerja).
3. Selanjutnya komputer Colossus ditemukan pada tahun 1943, berkemampuan untuk membatasi kemampuan program pada alat ini menunjukkan bahwa perangkat menggunakan ribuan tabung dapat digunakan lebih baik dan elektronik reprogrammable.Komputer ini digunakan untuk memecahkan kode perang Jerman.
4. The Harvard Mark I ditemukan pada 1944, mempunyai skala besar, merupakan komputer elektromekanis dengan programmability terbatas.

5. Lalu lahirlah US Army’s Ballistic Research Laboratory ENIAC ditemukan pada tahun 1946, komputer ini digunakan unutk menghitung desimal aritmatika dan biasanya disebut sebagai tujuan umum pertama komputer elektronik (ENIAC merupaka generasi yang sudah sangat berkembang di zamannya sejak komputer pertama Konrad Zuse ’s Z3 yang ditemukan padatahun 1941).

Jenis-jenis komputasi modern
 1.   Mobile computing
Mobile computing atau komputasi bergerak merupakan kemajuan teknologi komputer sehingga dapat berkomunikasi menggunakan jaringan tanpa menggunakan kabel dan mudah dibawa atau berpindah tempat, tetapi berbeda dengan komputasi nirkabel. Contoh dari perangkat komputasi bergerak seperti GPS.
Beberapa keterbatasan dan resiko dari mobile computing:
      Kurangnya Bandwith Akses internet pada peralatan ini umumnya lebih lambat dibandingkan dengan koneksi kabel.
      Gangguan Transmisi Banyak faktor yang bisa menyebabkan gangguan sinyal pada mobile computing seperti cuaca, medan dan jarak alat mobile computing dengan titik pemancar sinyal terdekat.
 2.   Grid computing
Grid computing Komputasi grid menggunakan komputer yang terpisah oleh geografis, didistibusikan dan terhubung oleh jaringan untuk menyelasaikan masalah komputasi skala besar.
Beberapa daftar yang dapat digunakan untuk mengenali sistem komputasi grid, adalah :
      Sistem untuk koordinat sumber daya komputasi tidak dibawah kendali pusat.
      Sistem menggunakan standard dan protocol yang terbuka.
      Sistem mencoba mencapai kualitas pelayanan yang canggih, yang lebih baik diatas kualitas komponen individu pelayanan komputasi grid.
 3.    Cloud computing
Cloud computing Komputasi cloud merupakan gaya komputasi yang terukur dinamis dan sumber daya virtual yang sering menyediakan layanan melalui internet. Komputasi cloud menggambarkan pelengkap baru, konsumsi dan layanan IT berbasis model dalam internet, dan biasanya melibatkan ketentuan dari keterukuran dinamis dan sumber daya virtual yang sering menyediakan layanan melalui internet.
Adapun perbedaan antara komputasi mobile, komputasi grid dan komputasi cloud, dapat dilihat penjelasannya dibawah ini :
      Komputasi mobile menggunakan teknologi komputer yang bekerja seperti handphone, sedangkan komputasi grid dan cloud menggunakan komputer.
      Biaya untuk tenaga komputasi mobile lebih mahal dibandingkan dengan komputasi grid dan cloud.
      Komputasi mobile tidak membutuhkan tempat dan mudah dibawa kemana-mana, sedangkan grid dan cloud membutuhkan tempat yang khusus.
      Untuk komputasi mobile proses tergantung si pengguna, komputasi grid proses tergantung pengguna mendapatkan server atau tidak, dan komputasi cloud prosesnya membutuhkan jaringan internet sebagai penghubungnya.

 Kesimpulan
Pada zaman sekarang ini dengan kemajuan yang pesat “Komputasi Modern” membantu manusia untuk menyelesaikan masalah-masalah yang kompleks dengan menggunakan komputer untuk memenuhi kebutuhan dan tidak hanya untuk menghitung.

Sumber:
http://www.beritanet.com/Education/John-Von-Neumann.html
http://jaelanichaidir.blogspot.com/2013/03/artikel-komputasi-modern.html


Nama : Prasetya Anugrah Herdian
Kelas  : 4IA25
NPM   : 55411556

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS
Post Icon

Game Engine Panda3D

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 28 Mei, 2008 perangkat lunak bebas di bawah revisi lisensi BSD. Rilis sebelum 28 Mei 2008 tidak dianggap Free Software karena kesalahan tertentu dalam desain lisensi Panda3D tua. Meskipun demikian, rilis ini lebih tua dari Panda3D juga dapat digunakan untuk kedua pengembangan game gratis dan komersial tanpa biaya keuangan.
Dimaksudkan Panda3D ini permainan pengembangan bahasa Python. Mesin itu sendiri ditulis dalam C + + , 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 manajemen memori maju, namun tetap kinerja bahasa disusun dalam inti mesin. Misalnya, mesin yang terintegrasi dengan kolektor sampah Python, dan struktur mesin secara otomatis dikelola.
The manual dan contoh program menggunakan Python, meskipun pengembang bekerja pada menerjemahkan manual untuk C + + dan menyediakan C + + sampel program.
Seorang pengembang menggunakan Panda3D biasanya menulis kode di Python, tetapi juga memungkinkan untuk langsung mengakses mesin menggunakan C + + code.
Para pengguna Panda3D termasuk pengembang dari beberapa game komersial besar, sebuah proyek sumber terbuka beberapa, dan sejumlah program universitas yang memanfaatkan kurva belajar pendek Panda3D itu. Masyarakat kecil tapi aktif, dan pertanyaan pada forum umumnya menjawab dengan cepat.

Desain
Panda3D adalah mesin grafik adegan. Ini berarti bahwa dunia maya ini awalnya kosong Cartesian ruang menjadi yang menyisipkan permainan programmer model 3D. Panda3D tidak membedakan antara "besar" model 3D, seperti model dari penjara seluruh atau pulau, dan "kecil" model 3D, seperti model meja atau pedang. Model baik besar dan kecil yang dibuat dengan menggunakan program pemodelan standar seperti Blender , 3ds Max atau Maya , dimuat ke Panda3D, dan kemudian dimasukkan ke dalam ruang Cartesian.
Grafik adegan Panda3D mengekspos fungsi OpenGL dan DirectX dalam bentuk yang cukup literal. Misalnya, OpenGL dan DirectX keduanya memiliki kemampuan kabut. Untuk mengaktifkan kabut di Panda3D, satu hanya menyimpan parameter kabut pada node dalam grafik adegan. Parameter kabut sama persis dengan parameter panggilan setara dalam API yang mendasarinya. Dengan cara ini, Panda3D dapat dilihat sebagai pembungkus tipis sekitar API tingkat rendah. Dimana hal itu berbeda dari mereka adalah bahwa ia menyimpan adegan, sedangkan OpenGL dan DirectX tidak. Tentu saja, itu juga menyediakan tingkat yang lebih tinggi operator, seperti memuat model, melaksanakan animasi, mendeteksi tabrakan, dan sejenisnya.
 Panda3D pertama direkayasa sebelum adanya shader vertex dan pixel. Ini diperoleh dukungan untuk shader manual ditulis pada tahun 2005. Namun, pengguna telah lambat untuk meningkatkan modern yang per-pixel 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.
Untuk memperbaiki situasi ini, para pengembang Panda3D baru-baru ini diberikan Panda3D kemampuan untuk mensintesis shader otomatis. Sintesis ini terjadi jika pemodel 3D menandai model untuk per-pixel pencahayaan, atau jika pemodel menerapkan peta normal, peta, gloss diri iluminasi peta, atau kemampuan lain yang melebihi kemampuan dari pipa fixed-fungsi. Tujuan dari sintesis ini adalah untuk membuat model sebagai modeler dimaksud, tanpa intervensi dari programmer.

Non-Graphical Kemampuan
            Panda3D menyediakan kemampuan selain render 3D. Kepala di antara ini adalah : 
-          Kinerja alat analisis. 
-          Eksplorasi grafik alat adegan. 
-           Debugging alat. 
-           Sebuah seni pipa ekspor / impor lengkap. 
-           3D Audio, baik menggunakan FMOD , OpenAL atau Sistem Suara Miles . 
-           Deteksi tabrakan. - Fisika sistem, dan integrasi penuh untuk Mesin Dynamics Terbuka , eksperimental PhysX dan integrasi Bullet.
-           Keyboard dan dukungan Mouse.
-           Dukungan untuk I / O device.
-          Negara yang terbatas mesin.
-          GUI, integrasi libRocket.
-           Jaringan.
-           Kecerdasan buatan.

Sejarah
The Disney studio VR adalah cabang dari Disney yang diciptakan untuk membangun atraksi 3D untuk taman hiburan Disney. Mereka membangun daya tarik yang disebut "Magic Carpet Aladin," dan mesin yang mereka buat untuk itu akhirnya menjadi Panda3D. Mesin dalam bentuk yang sekarang sedikit beruang kemiripan kepada tahun-tahun awal. Seiring waktu, Panda3D digunakan untuk naik VR tambahan di taman hiburan Disney, dan akhirnya digunakan dalam penciptaan Toontown online , game online diatur dalam dunia kartun, dan kemudian untuk kedua MMORPG , Pirates of the Caribbean online.
Pada tahun 2002, mesin dirilis sebagai open source. Menurut penulis, ini adalah agar mereka "bisa lebih mudah bekerja dengan universitas pada proyek-proyek penelitian Virtual Reality."  Namun, butuh beberapa waktu untuk Panda3D untuk lepas landas sebagai proyek open-source. Dari artikel:
Sistem ini, meskipun cukup digunakan oleh tim yang mengembangkan itu, tidak cukup "open source siap." Ada beberapa pengguna yang tertarik, tetapi membangun dan memasang sistem itu sangat kompleks, dan ada sedikit di jalan dokumentasi atau kode sampel, sehingga tidak ada komunitas sumber terbuka yang signifikan segera.
Namun, terbuka-sumber dari mesin diperbolehkan Carnegie Mellon Pusat Teknologi Hiburan untuk bergabung dalam pengembangan mesin. Sementara Disney insinyur terus melakukan sebagian besar pembangunan, tim Carnegie Mellon-membangun peran untuk dirinya sendiri polishing mesin untuk konsumsi publik, menulis dokumentasi, dan menambahkan beberapa fitur high-end seperti shader.
Nama Panda3D yang pernah akronim: "Agnostic platform jaringan Arsitektur Tampilan." Namun, karena frase yang telah kehilangan sebagian besar maknanya, kata "Panda3D" jarang dianggap sebagai akronim lagi.

Software Lisensi
Pada tahun 2002, ketika mesin itu open source, tujuan dari pengembang adalah untuk menciptakan sebuah Free Software lisensi. Namun, lisensi memiliki beberapa kekurangan yang membuatnya non-Free: bisa dibilang diperlukan mengirimkan perubahan Panda. Project @ Disney.com, dan secara eksplisit melarang ekspor perangkat lunak untuk berbagai bangsa terhadap mana Amerika Serikat memiliki embargo perdagangan.
Pada Rabu Mei 28, 2008, batang pembangunan Panda3D beralih ke lisensi BSD. Namun, rilis lama masih menggunakan lisensi lama.
Panda3D membuat penggunaan beberapa perpustakaan pihak ketiga yang izinnya juga tidak Free Software , termasuk FMOD , Nvidia Cg , DirectX , dan MFC. Sebagian besar dari modul ini dapat dengan mudah dikeluarkan dari instalasi, namun.

Mendukung protokol Buffer
Saya ingin bicara sejenak tentang dukungan protokol buffer baru dalam versi pengembangan terbaru dari Panda3D. Ini bukan fitur yang sangat menarik, tetapi dapat menjadi salah satu yang penting, terutama jika Anda menggunakan Panda3D bersama-sama dengan perpustakaan lain seperti NumPy atau jika Anda perlu untuk melakukan banyak operasi tingkat rendah pada tekstur atau data geometri dari Python. Namun, sebagian besar kasus penggunaan tidak akan memerlukan fungsi ini.

The Python penyangga protokol adalah cara untuk aplikasi Python untuk mendapatkan hook langsung ke C / C + + memori, array pada khususnya. Kelas Panda3D yang mendukungnya memberikan pointer ke memori yang mendasari untuk interpreter Python bersama dengan penjelasan tentang bagaimana data diletakkan di memori. Deskripsi ini diperlukan untuk Python untuk mengetahui bagaimana untuk mengakses dan menyalin informasi.

Dimulai dengan Python 2.6, Anda dapat menggunakan built-in jenis multiview untuk mengakses memori yang mendasari obyek mengekspos antarmuka penyangga. Anda kemudian dapat memanipulasi data dengan mengubahnya menjadi daftar atau objek 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.

Saat ini, satu-satunya kelas Panda3D yang mengekspos antarmuka penyangga GeomVertexArrayData dan PointerToArray (yang terakhir yang digunakan untuk tujuan penyimpanan array yang paling di Panda3D, termasuk tekstur), tetapi lebih kelas dapat dengan mudah ditambahkan pada permintaan. Sebaliknya, Panda memungkinkan mengambil objek penyangga yang sudah ada (seperti dari array.array atau array NumPy) sebagai sumber data untuk tekstur atau array data vertex.
Saat menyalin data ke perpustakaan lain seperti NumPy, hal ini dapat membantu mengurangi operasi copy yang tidak perlu. Saat ini, Anda akan memanggil metode seperti get_data () untuk membuat C + + string, yang merupakan salah satu operasi copy sudah, yang kemudian akan dibungkus ke dalam string Python, yang adalah hal lain. Akhirnya, Anda akan melewati string ini ke NumPy, yang akan melakukan setidaknya satu operasi copy untuk menyalin ke representasi sendiri. Tapi karena NumPy juga mendukung protokol penyangga, Anda sekarang dapat menyalin isi dari tekstur atau dari array data vertex langsung ke array NumPy tanpa operasi copy yang tidak perlu.
Satu kasus penggunaan menarik lainnya untuk fitur ini adalah manipulasi cepat dan efisien data vertex dan data tekstur dari Python. Daripada harus membuat GeomVertexRewriter atau PNMImage untuk memodifikasi data masing-masing, kini Anda 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. Akses langsung ke memori juga 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 C / C + + memori manajemen. Secara khusus, data referensi dihitung, sehingga Anda tidak perlu khawatir tentang menghapus data. Anda harus sebenarnya mampu menjaga multiviews sekitar untuk konsumsi non-langsung, namun perlu diingat bahwa Anda mungkin masih perlu memberitahu Panda3D ketika Anda telah memodifikasi data kemudian (misalnya dengan panggilan eksplisit tambahan untuk modify_ram_image ()). Fitur ini akan tersedia dalam 1.9.0 rilis Panda3D SDK.

Tiga kali lipat frame rate Anda?
Secara historis, Panda selalu menjalankan 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. Tapi semua itu berubah.
Dimulai dengan Panda3D mendatang versi 1.8, kita akan mulai mendistribusikan Panda dengan benang benar diaktifkan dalam membangun, yang memungkinkan Anda untuk mengambil keuntungan dari paralelisasi yang benar pada setiap modern, mesin multi-core. Tentu saja, jika Anda ingin menggunakan threading secara langsung, Anda 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 C + +.
Tapi, lebih menggairahkan, kami juga memungkinkan fitur baru opsional dalam mesin Panda3D sendiri, untuk membuat rendering (yang semua C + + code) dijalankan sepenuhnya pada sub-benang, memungkinkan kode Python Anda untuk menjalankan sepenuhnya paralel dengan rendering proses, mungkin dua kali lipat frame rate Anda. Tapi bahkan melangkah lebih jauh dari itu. Anda berpotensi dapat membagi seluruh frame ke tiga core yang berbeda, mencapai paralelisasi belum pernah terjadi sebelumnya dan peningkatan kinerja 3x teoritis (meskipun, secara realistis, 1.5x 2x lebih mungkin). Dan semua ini terjadi tanpa coding upaya khusus pada bagian Anda, pengembang aplikasi-Anda hanya perlu menyalakannya.
Bagaimana cara kerjanya?
Untuk menggunakan fitur ini berhasil, Anda akan perlu memahami sesuatu tentang cara kerjanya. Pertama, pertimbangkan Panda normal, single-threaded membuat pipa. Waktu yang dihabiskan memproses setiap frame dapat dibagi lagi menjadi tiga fase yang terpisah, yang disebut "App", "menyisihkan", dan "Draw":
app, pemusnahan, draw
Dalam nomenklatur Panda, "App" adalah setiap waktu yang dihabiskan dalam aplikasi sendiri, yaitu program anda. Ini adalah lingkaran utama Anda, termasuk kode Python (atau C + + code) Anda menulis untuk mengontrol logika game tertentu Anda. Hal ini juga termasuk perhitungan Panda berbasis yang harus dilakukan serentak dengan kode aplikasi ini; misalnya, tabrakan traversal biasanya dianggap sebagai bagian dari App.
"Menyisihkan" dan "Menggambar" adalah dua fase mesin rendering utama Panda. Setelah kode aplikasi Anda selesai mengeksekusi untuk frame, maka Cull mengambil alih. Nama "menyisihkan" menyiratkan pandangan-frustum pemusnahan, dan ini adalah bagian dari itu; tetapi juga banyak lagi. Fase 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. Menyisihkan biasanya juga termasuk waktu untuk menghitung karakter animasi. Output dari Cull adalah daftar diurutkan objek dan negara-negara terkait untuk dikirim ke kartu grafis.
"Draw" adalah tahap akhir dari proses rendering, yang tidak lebih dari berjalan melalui daftar objek output dengan menyisihkan, dan mengirim mereka satu per satu untuk kartu grafis. Hasil imbang ini dirancang untuk menjadi sebagai ringan mungkin pada CPU; idenya adalah untuk menjaga 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.

Anda dapat melihat waktu aktual yang dihabiskan dalam tiga fase jika Anda memeriksa pelaksanaan program Anda melalui alat PStats. Setiap aplikasi yang berbeda, tentu saja, 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 menjadi tiga bagian.

Sekarang bahwa kita memiliki kerangka waktu dibagi menjadi tiga bagian yang lebih-atau-kurang sama, kode pipa ulir dapat berlaku, dengan memisahkan setiap tahap ke dalam thread yang berbeda, sehingga dapat dijalankan (berpotensi) pada CPU yang berbeda, seperti ini :
app, menyisihkan, menarik benang terpisah
Perhatikan bahwa App tetap pada pertama, atau main benang; kita hanya pindah Cull dan Draw ke thread terpisah. Hal ini penting, karena itu berarti bahwa semua kode aplikasi Anda dapat terus menjadi single-threaded (dan karena itu jauh lebih mudah dan lebih cepat untuk mengembangkan). Tentu saja, ada juga tidak ada yang mencegah Anda menggunakan benang tambahan di App jika Anda ingin (dan jika Anda memiliki cukup tambahan CPU untuk membuatnya berharga).
Jika 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 melanjutkan. Tidak mungkin untuk menjalankan menyisihkan untuk mencari tahu hal-hal apa yang akan diberikan sebelum fase App telah selesai mengatur adegan grafik dengan benar. Demikian pula, tidak mungkin untuk menjalankan Menggambar sampai tahap menyisihkan selesai memproses grafik adegan dan membangun daftar objek.
Namun, setelah App selesai diproses frame 1, tidak ada alasan untuk itu thread untuk duduk-duduk menunggu untuk sisa frame yang akan selesai menggambar. Hal ini dapat pergi ke depan dan mulai bekerja pada frame 2, pada saat yang sama bahwa benang menyisihkan mulai memproses frame 1. Dan kemudian pada saat menyisihkan selesai diproses frame 1, dapat mulai bekerja pada pemusnahan bingkai 2 (yang juga memiliki App baru saja selesai dengan). Puting itu semua dalam bentuk grafis, kerangka waktu sekarang terlihat seperti ini:
Sepenuhnya dipentaskan membuat pipa
Jadi, kita melihat bahwa kita sekarang dapat engkol keluar frame sampai tiga kali lebih cepat daripada di aslinya, single-threaded kasus. Setiap frame sekarang mengambil jumlah waktu yang sama, total, sebagai terpanjang asli tiga fase. (Dengan demikian, speedup maksimum teoritis 3x hanya dapat dicapai dalam praktek jika semua tiga fase yang persis sama panjang.)

Ini perlu menunjukkan bahwa satu-satunya hal yang kita telah meningkat di sini adalah bingkai * Throughput *-jumlah frame per detik bahwa sistem dapat membuat. Pendekatan ini tidak apa-apa untuk meningkatkan bingkai * latency *, atau total waktu yang berlalu antara waktu beberapa perubahan yang terjadi dalam permainan, dan waktu yang muncul pada layar. Ini mungkin menjadi salah satu alasan untuk menghindari pendekatan ini, jika latency lebih penting daripada throughput. Namun, kita masih berbicara tentang total latency yang biasanya kurang dari 100ms atau lebih, yang lebih cepat daripada waktu respon manusia pula; dan sebagian besar aplikasi (termasuk game) dapat mentolerir sejumlah kecil latency seperti ini dalam pertukaran untuk halus, frame rate yang cepat.
Agar semua ini bekerja, Panda harus melakukan beberapa trik pintar di belakang layar. Trik yang paling penting adalah bahwa perlu ada tiga salinan yang berbeda dari adegan grafik di negara bagian yang berbeda dari modifikasi. Karena proses App Anda bergerak node sekitar untuk frame 3, misalnya, Cull masih menganalisis bingkai 2, dan harus mampu menganalisis grafik adegan * sebelum * apa pun di App mulai penyia-nyiaan waktu untuk membuat frame 3. Jadi perlu ada . salinan lengkap dari grafik adegan disimpan sebagai akhir App frame 2 Panda melakukan pekerjaan yang cukup baik untuk melakukan hal ini secara efisien, bergantung pada kenyataan bahwa sebagian besar hal-hal yang sama dari satu frame ke yang berikutnya; tapi masih ada beberapa overhead untuk semua ini, sehingga keuntungan total kinerja selalu agak kurang dari 3x speedup teoritis. Secara khusus, jika aplikasi sudah berjalan cepat (60fps atau di atas), maka keuntungan dari paralelisasi kemungkinan akan dikerdilkan oleh persyaratan overhead tambahan. Dan, tentu saja, jika aplikasi Anda sangat sepihak, sehingga hampir semua waktunya dihabiskan di App (atau, sebaliknya, hampir semua waktunya dihabiskan pada Draw), maka Anda tidak akan melihat banyak manfaat dari ini trik.
Juga, perhatikan bahwa tidak mungkin lagi untuk apa pun di App untuk menghubungi kartu grafis secara langsung; sementara App berjalan, kartu grafis sedang dikirim perintah gambar dari dua frame lalu, dan Anda tidak dapat dipercaya mengganggu ini tanpa mengambil kinerja hit besar. Jadi ini berarti bahwa OpenGL callback dan sejenisnya harus peka terhadap sifat threaded pipa grafis. (Inilah sebabnya mengapa antarmuka Panda untuk jendela grafis memerlukan panggilan tidak langsung:. Base.win.requestProperties (), 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 1,8. Ini sudah tersedia dalam rilis buildbot saat ini; untuk menyalakannya, lihat halaman manual baru pada subjek. Marilah kita tahu tanggapan Anda! Masih mungkin kinks untuk bekerja keluar, jadi kami ingin tahu seberapa baik bekerja untuk Anda.

Panda3D dan Cython
Ini adalah tentang bagaimana untuk mempercepat Anda Kode Python, dan tidak berdampak langsung pada kinerja Panda3D itu. Untuk sebagian besar proyek, sebagian besar waktu eksekusi adalah di dalam Panda3D di C + + atau GPU, jadi tidak peduli apa yang Anda lakukan, memperbaiki Python Anda tidak akan membantu. Untuk kasus-kasus lain di mana Anda perlu untuk mempercepat kode Python Anda, Cython dapat membantu. Hal ini terutama ditujukan kepada orang-orang yang lebih memilih pemrograman Python, tapi tahu setidaknya sedikit tentang C. Saya tidak akan membahas bagaimana melakukan optimasi dalam Python, meskipun jika artikel ini adalah relevan bagi Anda, Anda benar-benar harus melihat ke dalamnya.

Cython adalah bahasa pemrograman yang menarik. Ini menggunakan versi diperpanjang sintaks python untuk memungkinkan hal-hal seperti variabel statis diketik, dan panggilan langsung ke C + + perpustakaan. Cython mengkompilasi kode ini ke C + +. The C + + kemudian mengkompilasi sebagai modul ekstensi python yang Anda dapat mengimpor dan menggunakan seperti modul python biasa. Ada beberapa manfaat untuk ini, tetapi dalam konteks kita yang utama adalah kecepatan. Kode Cython benar ditulis bisa secepat kode C, yang dalam beberapa kasus tertentu bisa bahkan 1000 kali lebih cepat daripada kode python hampir identik. Umumnya Anda tidak akan melihat 1000x kecepatan meningkat, tetapi dapat cukup sedikit. Ini menyebabkan modul untuk hanya bekerja pada platform mereka dikumpulkan, jadi Anda akan perlu untuk mengkompilasi versi alternatif untuk platform yang berbeda.

Secara default, Cython mengkompilasi ke C, tapi versi baru 0,13 mendukung C + +. Ini lebih berguna karena Anda mungkin menggunakan setidaknya satu C + + perpustakaan, Panda3D. Saya memutuskan untuk mencoba ini, dan setelah tersandung pada masalah sederhana, saya mendapatkannya bekerja, dan aku bahkan tidak tahu C + +.
Sebelum saya masuk ke rincian, saya akan menjelaskan mengapa Anda mungkin ingin menggunakan Cython, daripada port kemacetan kinerja untuk C + + dengan tangan. Manfaat utama adalah dalam proses, serta keahlian yang diperlukan. Jika Anda memiliki basis besar Python kode untuk sebuah proyek, dan Anda memutuskan beberapa hal perlu menjadi jauh lebih cepat, Anda memiliki beberapa pilihan. Pendekatan umum tampaknya untuk belajar C + +, pelabuhan kode, dan belajar bagaimana membuatnya sehingga Anda dapat antarmuka untuk itu dari python. Dengan Cython, Anda hanya dapat menambahkan beberapa jenis definisi variabel di mana Anda perlu peningkatan kinerja, dan kompilasi yang memberi Anda modul Python yang bekerja seperti yang Anda miliki. Jika Anda perlu untuk mempercepat kode yang interface dengan Panda3D, Anda dapat menukar panggilan Python API untuk C + + yang. Menggunakan Cython memungkinkan Anda untuk hanya menempatkan usaha dalam mempercepat bagian dari kode yang Anda butuhkan untuk bekerja, dan untuk melakukannya tanpa harus mengubah sangat banyak. Hal ini sangat berbeda dari membolos semua kode dan reimplementing itu bahasa lain. Hal ini juga mengharuskan Anda untuk belajar jumlah yang cukup minimal barang. Anda juga bisa menjaga kebaikan dari sintaks Python yang mungkin Python coders telah datang untuk menghargai.

Masih ada alasan utama untuk benar-benar kode dalam C + + ketika bekerja dengan Panda, tapi sebagai seseorang yang tidak melakukan coding di C + +, saya tidak akan berbicara tentang hal itu banyak. Jika Anda ingin langsung memperpanjang atau berkontribusi Panda3D, ingin menghindari berlebihan menetapkan impor Anda dari file header (Cython akan meminta Anda untuk menentukan kembali bagian-bagian dari API yang Anda gunakan bukan hanya menggunakan file header dikirimkan dengan Panda), atau Anda hanya memilih C + +, C + + mungkin menjadi pilihan yang lebih baik. Aku terutama melihat Cython sebagai pilihan yang nyaman ketika Anda berakhir perlu mempercepat bagian dari Python kode-dasar; bagaimanapun, adalah praktis untuk melaksanakan proyek-proyek besar dari awal di Cython.

Cython memang memiliki beberapa kelemahan juga. Hal ini masih dalam pengembangan lebih awal. Ini berarti Anda akan menemukan bug di penerjemah serta kode yang dihasilkan. Hal ini juga tidak memiliki dukungan untuk fitur Python beberapa, seperti sebagian besar menggunakan generator. Secara umum saya tidak punya banyak masalah dengan masalah ini, tapi pengalaman Anda mungkin berbeda.
Cython tidak menawarkan manfaat sisi menarik juga. Hal ini memungkinkan Anda untuk opsional statis jenis variabel dan dengan demikian dapat mendeteksi lebih banyak kesalahan pada waktu kompilasi daripada Python.
Untuk memulai, pertama-tama Anda perlu menginstal Cython 0,13 (atau mungkin versi yang lebih baru). Jika Anda memiliki Cython menginstal Anda dapat memeriksa versi dengan perintah-V. Anda dapat mengambil sumber dari situs Cython, dan menginstalnya dengan menjalankan "python setup.py install" dari direktori sumber Cython. Anda juga akan perlu memiliki sebuah kompiler. Situs Cython akan membantu Anda mendapatkan setup segalanya jika Anda membutuhkan bimbingan tambahan.
Maka Anda harus mencoba sampel untuk memastikan bahwa Anda memiliki semua yang Anda butuhkan, dan bahwa itu semua bekerja. Ada bagus C + + sampel untuk Cython pada Cython Wiki. (Ini bekerja untuk saya pada Mac, dan Windows menggunakan MinGW atau MSVC sebagai kompilator).
Seperti untuk bekerja dengan Panda3D, ada beberapa hal yang saya temukan:
    Ada keuntungan kinerja yang signifikan yang bisa didapat dengan hanya menyusun modul Python yang ada sebagai Cython. Dengan pekerjaan tambahan sedikit menambahkan variabel diketik statis, Anda dapat memiliki keuntungan kinerja yang lebih besar bahkan tanpa pindah ke Panda C + + API (Yang berarti Anda tidak perlu khawatir tentang menghubungkan terhadap Panda3D yang dapat menjadi masalah).
   Panda3D sudah memiliki binding python dengan manajemen memori yang baik, jadi saya sarankan instancing semua benda menggunakan python API, dan hanya beralih ke C + + satu sesuai kebutuhan.
   Anda dapat menggunakan 'ini' properti pada objek Python Panda3D untuk mendapatkan pointer ke C + + objek yang mendasari.   Pada mac, Anda perlu memastikan libpanda (dan beberapa kasus, mungkin orang lain juga) dimuat sebelum mengimpor modul ekstensi Anda jika Anda menggunakan salah satu perpustakaan Panda3D itu.
    Pada Windows, Anda perlu menentukan perpustakaan Anda butuhkan ketika kompilasi (dalam 
kasus saya, hanya libpanda).    The C + + kelas dan kelas Python cenderung memiliki nama yang sama. Untuk mengatasi ini, Anda dapat menggunakan "dari x impor y sebagai z" ketika mengimpor yang python, atau Anda hanya dapat mengimpor panda3d.core, dan menggunakan nama lengkap dari kelas (seperti panda3d.core.Geom). Mungkin ada cara untuk mengubah nama C + + kelas pada impor juga.    Jika menggunakan Panda3D C + + API pada Windows, Anda akan perlu menggunakan compiler MSVC. Anda bisa mendapatkan Microsoft Visual Studio 2008 Express Edition secara gratis yang meliputi dibutuhkan compiler.

Dengan menggunakan teknik ini saya mendapat peningkatan kinerja 10x pada kode saya untuk memperbarui posisi vertex di Geom saya. Ini menghindari keharusan untuk membuat objek python untuk semua vertexes dan melewati mereka melalui API Python yang diterjemahkan mereka kembali ke C + + objek. Itu hanya masalah bergerak lebih satu panggilan di dalam loop ke API lain. Ini, bagaimanapun, dilakukan dalam sudah dioptimalkan kode Cython yang hanya memuat posisi vertex disimpan dalam blok memori ke dalam Geom. Kebanyakan kasus penggunaan mungkin akan melihat sedikit manfaat. Keseluruhan meskipun, saya mendapatkan banyak kinerja baik dari perubahan ke Cython, dan dari perubahan ke C + + API. Perubahan ini hanya diperlukan perubahan yang relatif kecil untuk bagian kritis kecepatan kode python saya yang sudah ada.
Saya membuat contoh yang agak minimal menggunakan panggilan Panda3D C + + API dari Cython. Tempatkan setup.py dan file testc.pyx dalam direktori yang sama, dan dari direktori tersebut, jalankan setup.py dengan Python Anda menginstal Anda gunakan dengan Panda3D. Jika semuanya sudah dikonfigurasi dengan benar, ini harus mengkompilasi contoh Cython modul, testc.pyx, untuk modul ekstensi python dan menjalankannya. Jika berhasil, ia akan mencetak beberapa baris diakhiri dengan "selesai". Kemungkinan Anda mungkin perlu men-tweak jalan di setup.py. Jika tidak pada Mac atau Windows, Anda akan mendapatkan error menunjukkan di mana Anda harus memasukkan pengaturan compiler Anda (kebanyakan hanya jalan untuk perpustakaan Panda3D s).
Saya ingin mengucapkan terima kasih Lisandro Dalcin dari Cython-Pengguna mailing list yang membantu saya mendapatkan ini bekerja pada Windows.

Hardware Geometri Instancing
Baru-baru ini, saya telah bekerja pada demo Medan Tak Terbatas kecil yang menjelaskan 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 Shader Generator. (Pada sidenote, saya tidak berakhir membutuhkan setiap shader untuk medan.)
Senin lalu, saya menambahkan pohon untuk medan. Karena ini merupakan demo medan tak terbatas, saya perlu untuk menambahkan cukup jumlah pohon yang. Tapi saya menemukan bahwa (bahkan dengan kemampuan merata Panda3D s) GPU saya dengan cepat let me down setelah beberapa ribu pohon. Jadi, aku sadar aku butuh untuk menambahkan geometri dukungan instancing ke Panda3D.
Dan jadi saya lakukan. Ternyata cukup sepele untuk melaksanakan dan hanya membawa saya satu atau dua jam. Hasilnya cukup menyenangkan! Saya telah berhasil membuat lebih dari 100000 pohon (dan medan besar) pada saat yang sama pada framerate yang wajar! Berikut adalah screenshot dari apa yang tampak seperti sekarang: screenshot-Tue-Dec-22-14-52-54-2009-67
Tentu saja, adegan WIP bisa menggunakan banyak perbaikan, tetapi Anda mendapatkan poin saya. Dan dengan beberapa pemusnahan yang tepat dan LOD, aku bisa mendorong jumlah pohon yang lebih tinggi.Tapi tidak Panda3D sudah mendukung instancing?
Saat ini, Panda3D mendukung instancing model animasi. Itu sama sekali tidak terkait geometri instancing. Sistem instancing yang ada hanya ada untuk meningkatkan kinerja jika Anda memiliki banyak model animasi, dengan mengurangi jumlah pemindahan titik yang dilakukan oleh sistem animasi Panda3D itu. Geometri instancing, di sisi lain, ada untuk mengurangi jumlah data yang dilewatkan ke kartu video. Apakah model animasi atau tidak adalah tidak relevan dengan sistem instancing baru.Bagaimana cara kerjanya?
Sebelum kemarin, jika Anda ingin membuat beberapa contoh model, Anda akan baik memuat model beberapa kali atau menggunakan CopyTo. Saya telah melihat bahwa banyak orang menggunakan instanceTo dalam hal ini, tapi itu tidak akan berpengaruh positif pada kinerja untuk model statis. Geometri masih akan melewati banyak kali untuk GPU, yang merupakan proses yang lambat.
Dengan sistem baru, Anda tetap hanya satu salinan dari model dan memanggil setInstanceCount (n) di atasnya. Ini berarti bahwa itu akan tetap diteruskan ke GPU hanya sekali, tetapi akan diberikan n kali.
Anda mungkin bertanya-tanya, bagaimana cara memberikan setiap parameter yang berbeda node atau posisi yang berbeda? Nah, yang bisa dilakukan di shader. Anda 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. Hal ini memungkinkan Anda untuk melakukan dasarnya apapun. Anda dapat mengirim bola tunggal untuk GPU, melewati tekstur 3D dengan peta perpindahan di setiap lapisan, dan mengatur misalnya menghitung sampai 1024. Itu akan menghasilkan 1.024 batu yang unik dengan menggunakan hanya satu batch panggilan dan jumlah yang sangat terbatas geometri upload .

Ini meninggalkan pertanyaan apakah ini benar-benar akan bekerja tanpa menggunakan shader. Jawabannya adalah tidak, aku takut. Ada ekstensi OpenGL yang memungkinkan Anda untuk menggunakan geometri instancing dengan pipa tetap-fungsi, tetapi sangat sedikit video card mendukungnya. Karena itu akan sangat rumit untuk menerapkan itu, saya memutuskan untuk tidak melakukannya.
Catatan bahwa ini hanya didukung dalam OpenGL sejauh ini. Mungkin seseorang akan menambahkan dukungan untuk ini untuk DirectX sisi Panda suatu hari nanti.

Sistem Impor untuk C + + modul
Saya baru saja memeriksa dukungan untuk baru 'panda3d' modul mengkilap yang lebih baik mengatur C + + kelas Panda3D. Fitur ini telah diminta untuk sementara waktu sekarang karena banyak yang terganggu dengan panjang, terorganisir dan impor melalui pandac.PandaModules. Pada dasarnya, sekarang memungkinkan Anda untuk mengimpor kelas Panda3D seperti ini:

dari panda3d.egg EggData impor
dari panda3d.ode impor OdeJoint
dari panda3d.core impor *
Sistem saat ini
Ada sejumlah Panda3D pustaka dinamis yang berisi modul Python, misalnya libp3direct, libpandaexpress, libpanda, libpandaegg dan libpandaode. Anda 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 CPython.

Namun, tidak semua fungsi untuk kelas-kelas diimplementasikan dalam C + +. Ada banyak fungsi yang diimplementasikan dalam Python yang menyediakan fungsi tambahan ke C + + kelas. Metode tersebut hanya metode kemudahan untuk membuat hidup Anda lebih mudah, atau ada untuk membuat antarmuka yang lebih Pythonic. Beberapa metode ini telah usang dalam mendukung pelaksanaan itu pada C + + sisi (atau alat pembungkus pembangkit, menginterogasi.)

Fungsi ekstensi ini didefinisikan dalam pandac / libnameModules.py, di mana 'libname' adalah nama dari perpustakaan yang bersangkutan. Setelah Anda mengimpor pandac / PandaModules.py, kode Python diimpor dari semua perpustakaan Panda3D, dan fungsi ekstensi ditambahkan ke kelas.
Fungsi ekstensi bukan satu-satunya alasan mengapa 'pandac' pohon ada. Saya baru saja mengatakan bahwa Anda dapat langsung mengimpor perpustakaan yang dinamis dari Python, tapi itu tidak sepenuhnya benar - tidak mungkin lagi, karena dari Python 2.5, pada Mac dan Windows. (Pada Windows, Anda masih dapat mengimpor dengan mengubah nama dll ke dalam PYD, tapi trik itu tidak bekerja untuk Mac OSX dylibs.)
Oleh karena itu, kita perlu secara manual mengimpor perpustakaan dengan menempatkan terlebih dahulu dan kemudian langsung memuatnya melalui fungsi load_dynamic dalam modul imp Python. Kode untuk melakukan ini telah ditambahkan ke 'pandac', karena itu adalah tempat di mana perpustakaan Panda3D biasanya diimpor.
Sistem baru
Dalam sistem yang baru, bukannya mengimpor kelas yang bersangkutan dari pandac.PandaModules, Anda akan mengimpor kelas dari submodule dari modul 'panda3d'.
Kami tidak kelompok kelas oleh direktori source mereka, seperti yang diusulkan. Pengorganisasian modul 'panda3d' sedemikian rupa bahwa sub-paket merupakan direktori sumber akan membuatnya sia-sia rumit.
 Sebaliknya, kami memilih untuk kelas kelompok oleh C + + perpustakaan dinamis. Nama submodule didefinisikan dengan nama perpustakaan tanpa "libpanda" atau "libp3" awalan. Misalnya, peta libpandaegg untuk panda3d.egg, dan libp3direct peta untuk panda3d.direct.
Ada satu pengecualian untuk libpanda dan libpandaexpress perpustakaan, mereka tergabung dalam satu modul, panda3d.core. Kami memilih untuk melakukan ini karena libpanda dan libpandaexpress berisi pembungkus Python untuk inti Panda3D - Anda akan perlu perpustakaan ini untuk melakukan sesuatu yang berguna dengan Panda3D. Selain itu, perbedaan antara libpanda dan libpandaexpress adalah sewenang-wenang dan tidak berarti bagi pengembang.
Ketika lebih banyak perpustakaan yang ditambahkan kemudian, seperti libpandaphysx, dan libpandaai, kita hanya bisa menambahkan mereka ke dalam daftar.

Adapun 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 menjadi sia-sia rumit dan membingungkan. Selain itu, saya pikir ada manfaat dalam menjaga modul Python Panda3D dan C + + modul terpisah.
Kami melakukan mengakui penamaan malang pohon langsung, dan kami mungkin mengubah bahwa untuk masa mendatang, tapi itu akan menjadi perubahan besar.

Sistem impor baru semua dibundel ke dalam satu file, panda3d.py. Ini ganjil dari Python ilmu hitam tidak semua yang diperlukan - ini menempatkan perpustakaan Panda3D, menambahkan lokasi mereka ke jalur perpustakaan sistem, modul register palsu, dan dinamis beban perpustakaan diperlukan ketika seseorang mulai menggunakan kelas dari itu.
Adapun fungsi ekstensi Python, mereka tidak didukung dalam sistem yang baru. Alasan untuk ini adalah bahwa kita mencoba untuk fase keluar, dan mencoba untuk memindahkan sebagian besar fungsi ke C + + sisi Panda3D.
Fitur lain yang keren adalah bahwa modul 'panda3d' menerapkan sistem malas-loading untuk itu perpustakaan. Itu berarti bahwa perpustakaan hanya akan di-load ketika Anda benar-benar menggunakan salah satu kelas itu. Hal ini memiliki keuntungan bahwa perpustakaan Anda tidak menggunakan tidak akan dimuat, yang dapat mengakibatkan kecepatan sedikit dan mendapatkan memori.

Alasan

Sekarang, mengapa kita melakukannya? Selain 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. Selain itu, Anda tidak mengimpor perpustakaan Anda tidak perlu, yang mengarah ke sedikit lebih cepat kali impor, dan penggunaan memori yang lebih sedikit. Tapi yang lebih penting lagi, karena kita membutuhkannya untuk sistem plugin / runtime.

Eh, apa, mengapa? Aku akan menjelaskan. Ketika Anda mendistribusikan game yang dapat digunakan dengan runtime Panda3D (baik itu plugin browser, atau baik itu runtime mandiri), Anda pak ke file P3D.. File P3D. Akan menunjukkan versi Panda3D itu dibangun untuk. Ketika seseorang menjalankan file P3D. Melalui runtime, runtime mendownload membangun ultra-dioptimalkan kecil Panda3D untuk menjalankan paket P3D disediakan..

Paket Panda3D ini yang di-download oleh runtime harus sekecil mungkin. Karena seluruh Panda3D membangun akan mengandung komponen besar yang tidak setiap pertandingan akan menggunakan, kita telah memisahkan mereka ke dalam paket terpisah. Misalnya, "panda3d" paket berisi inti, "telur" paket berisi libpandaegg (biasanya, permainan dikemas hanya akan berisi file. Bam, jadi ini biasanya tidak diperlukan), libpandaode, sebuah "model" paket berisi default model, satu paket per perpustakaan audio, dll file P3D. dapat menunjukkan yang paket itu tergantung pada, sehingga ukuran download disimpan ke minimum.

Yang memberikan masalah dengan sistem lama impor pandac.PandaModules-gaya, meskipun. Pertama-tama, pandac.PandaModules impor setiap perpustakaan tunggal, sementara itu tidak menjamin bahwa semua perpustakaan pada sistem (seperti file P3D. Mungkin tidak perlu beberapa dari mereka). Kami harus menempatkan Hacky penangan ImportError pengecualian dalam PandaModules.py untuk bekerja di sekitar itu.

Selain itu, dengan sistem lama, kita tidak memiliki kontrol lagi atas kelas diimpor. Mengapa kita perlu itu? Nah, game ini memiliki kemampuan untuk men-download dan menginstal komponen lebih Panda3D ketika sedang berjalan. Dengan sistem baru, ketika misalnya komponen "telur" terinstal, kita dapat dengan mudah menambahkan hook ke dalam 'panda3d.egg' modul secara otomatis diperbarui dengan perpustakaan libpandaegg diinstal baru. Hal ini memungkinkan developer game untuk menjaga waktu pra-Upload untuk minimum dengan menginstal paket pada permintaan (misalnya, jika hanya bagian dari permainan menggunakan ODE fisika, pengembang dapat memilih untuk memiliki paket 'ode' diinstal setiap kali akhir-the pengguna memilih untuk menjalankan bagian dari permainan.)
Bagaimana hal itu mempengaruhi Anda

Jika Anda masih terjaga setelah membaca semua itu, Anda mungkin bertanya-tanya apa yang akan terjadi pada semua kode yang sudah ada. Apakah ini memecahkan apa pun? Jawabannya adalah, tidak. Sekarang, itu hanya file Python kecil yang saya menambahkan, yang memungkinkan Anda untuk mengimpor kelas Panda3D menggunakan konvensi yang berbeda. Ini masih eksperimental, sehingga 'pandac' pohon masih ada, dan bahkan tidak ditinggalkan. Ketika, mungkin setelah seri 1.7 rilis, sistem baru telah diuji secara menyeluruh dan terbukti bekerja lebih baik, kita bisa beralih kode Python dan contoh program ke sistem baru, dan merekomendasikan orang untuk menggunakannya.
Tapi jika Anda tidak merasa seperti switching, jangan khawatir. Seperti kita peduli tentang kompatibilitas ke belakang, dan karena sebagian besar dari kode ini sangat tergantung pada struktur lama, struktur 'pandac' mungkin akan sekitar untuk waktu loooong.
Contoh

Last but not least, beberapa contoh impor menunjukkan Anda sedikit cara kerjanya:

dari panda3d.egg EggData impor
dari panda3d impor ode
bersama = ode.OdeJoint
dari panda3d.core impor *
tex = Tekstur ()
tex.read (Filename ("img.png"))
impor panda3d.directival = panda3d.direct.CInterval ()

Plugin Browser dan samping manfaatnya
Kebanyakan orang tahu bahwa ada proyek dilakukan untuk membangun sebuah plugin browser untuk Panda3D. Saya telah bekerja keras pada proyek itu selama beberapa minggu terakhir, dan sekarang sudah hampir selesai, meskipun masih ada lebih banyak pekerjaan untuk pergi. Kami akan menargetkan 1.7.0, atau setidaknya 1.7.1, dengan rilis pertama dari upaya ini.

Saya pikir ini akan menjadi waktu yang baik untuk menjelaskan apa, tepatnya, Panda akan mendapatkan sebagai hasil dari semua ini.
Plugin browser
Pertama, ada yang sudah jelas: Anda akan dapat menjalankan aplikasi Panda3D Anda sebagai jendela tertanam dalam browser. Cukup menanamkan jendela Panda3D di browser secara teknis sangat mudah; kami memiliki kerja ini dalam beberapa hari setelah memulai proyek. Kita dapat berjalan pada setiap browser utama pada platform Panda3D didukung: IE pada Windows, atau Firefox pada Windows, Mac, dan Linux, belum lagi Safari, Chrome, Opera, dan mungkin beberapa browser yang lebih fiddly bahwa saya belum diuji belum. Pada setiap browser, dan pada setiap platform, menggunakan kemampuan hardware penuh kartu grafis Anda, dan berjalan pada frame rate penuh; tidak perlu terbatas pada software rendering. (Mungkin ada sedikit dampak pada kinerja kecil pada platform tertentu, tetapi masih, itu cara yang lebih cepat daripada perangkat lunak rendering.) Tapi kemudian ada pertanyaan besar tentang bagaimana Anda mendapatkan kode Anda ke sebuah halaman web di tempat pertama? File P3D

Untuk mengatasi itu, kita perlu alat untuk paket aplikasi Anda menjadi sebuah file download yang nyaman. Kami telah memiliki dasar-dasar alat tersebut untuk sementara waktu sekarang, tapi sekarang itu jauh lebih fleshed keluar. Ia bekerja semacam packpanda tidak, tapi bukannya membangun file exe, itu paket aplikasi Anda ke dalam sebuah file P3D. Pikirkan hal ini seperti Flash file swf dikompilasi. Sekarang, Anda dapat menanamkan file P3D Anda dalam halaman web dengan beberapa baris HTML sintaks, sangat mirip dengan cara Anda menanamkan file Flash swf, dan ada aplikasi Panda3D Anda bermain di halaman web!

File P3D berisi semua yang anda butuhkan untuk menjalankan aplikasi Anda. Jadi mengapa kita harus membatasi diri untuk menjalankan file P3D hanya pada web browser? Mari kita tidak. Kami juga akan mendistribusikan executable mandiri yang disebut panda3d.exe (atau hanya panda3d pada Mac dan Linux), yang dapat digunakan untuk menjalankan file P3D pada desktop Anda, tidak ada browser yang diperlukan.
Panda3D runtime
Lihatlah apa yang terjadi! Tiba-tiba, packpanda tidak lagi diperlukan. Bahkan jika Anda tidak pernah berencana untuk menanamkan aplikasi Anda pada halaman web, Anda dapat pak ke file P3D, dan mendistribusikan file bukan executable yang packpanda akan diproduksi. File P3D lebih baik dari file exe, karena (a) itu jauh lebih kecil, yang berisi aplikasi Anda saja, dan bukan salinan lain dari Panda, dan (b) itu platform-independen (disediakan aplikasi Anda ditulis dengan Python murni).
Siapapun yang menerima berkas P3D Anda bisa klik dua kali pada icon tersebut, dan jika mereka telah menginstal runtime Panda3D, tidak peduli apa OS mereka berjalan, akan meluncurkan dan menjalankan dengan salinan lokal mereka panda3d.exe. Jika Anda ingin mendistribusikannya kepada orang-orang yang mungkin belum memiliki runtime Panda3D, Anda dapat mengarahkan mereka link pada panda3d.org untuk menginstalnya, atau (jika Anda mendistribusikan judul CD-Rom, misalnya), Anda dapat mengirim salinan runtime Panda3D bersama dengan permainan dan menginstalnya secara otomatis. Hal ini mirip dengan cara permainan mendistribusikan runtime DirectX dari Microsoft. Pengguna yang menerima permainan Anda pada CD tidak perlu tahu bahwa mereka menjalankan Panda3D, meskipun mereka masih menjalankan permainan Anda dari file P3D.
Integrasi iPhone
Ini layak disebutkan secara sepintas, juga, bahwa ketika upaya plugin browser ini dilakukan dan saya mendapatkan kesempatan untuk meninjau kembali dukungan iPhone, maka saya akan dapat menulis Panda3D ini runtime untuk iPhone juga, yang akan memutar file P3D yang sama yang bermain di desktop Anda. (Realistis, Anda masih perlu untuk menyempurnakan permainan untuk membuatnya bekerja dengan baik pada iPhone. Kinerja Rendering dan antarmuka persyaratan yang sangat berbeda pada iPhone daripada mereka pada PC Anda. Tapi teknologi yang mendasari akan sama, dan beberapa game sederhana dapat bekerja tidak berubah pada kedua platform.) Sayangnya, Apple memiliki aturan lucu tentang aplikasi yang menjalankan aplikasi lain, jadi ini aplikasi Panda3D runtime tidak akan diizinkan pada iPhone non-Jailbroken. Untuk tinggal di dalam saluran yang sah, kami juga akan menyediakan cara untuk mengkompilasi file P3D menjadi benar, app iPhone benar-benar mandiri yang dapat didistribusikan melalui App Store dan diinstal ke setiap iPhone. (Ini juga akan mengharuskan Anda untuk membayar biaya Apple $ 100 pengembang, tentu saja.)
Keamanan web
Sekarang, kembali ke plugin browser, dan file P3D. Saya belum berbicara tentang keamanan: salah satu hal yang Flash dan Java sangat baik di (dan ActiveX sangat buruk at) dengan aman menjalankan kode yang tidak dipercaya pada halaman web. Ketiga teknologi ini memungkinkan sebuah program pada halaman web untuk segera mulai berjalan segera setelah Anda mengunjungi halaman. Hal ini memiliki implikasi yang jelas untuk hacker menginstal malware ke komputer Anda: sedangkan Flash dan Java keduanya pergi melalui lingkaran untuk membuat tidak mungkin untuk melakukan hal ini, ActiveX pada dasarnya membuka seluruh komputer Anda untuk program apa pun halaman web ingin lari. Untuk mengatasi dampak dari hal ini, Microsoft telah secara bertahap menutup berjalan otomatis aplikasi ActiveX, dan sekarang secara default meminta Anda sebelum menjalankan program ActiveX untuk pertama kalinya.

Jelas, kita lebih suka menjadi seperti Flash dan Java dalam hal ini daripada seperti ActiveX. Sayangnya, ternyata bahwa Python tidak benar-benar meminjamkan dirinya untuk menjalankan kode yang tidak dipercaya aman. Tidak seperti Flash ActionScript, atau Java, Python tidak pernah dirancang dari awal untuk menjadi 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. Benar-benar. Ada orang-orang di internet yang berpikir Python dapat dibuat aman (saya pernah menjadi salah satu dari mereka), dan beberapa orang yang berpikir mereka sudah melakukannya, tetapi untuk sebagian besar mereka keliru.

Ada beberapa solusi yang mungkin untuk ini. Sebagai contoh, kita bisa menjalankan interpreter Python sepenuhnya pada mesin virtual. Itu sulit, karena beberapa alasan, tetapi mungkin lebih mudah di masa depan, sebagai teknologi yang matang. Zope memiliki python aman yang saya pikir benar-benar dapat mencapai keamanan, tetapi juga sulit untuk digunakan, dan saya tidak yakin apa efeknya terhadap kinerja runtime. Juga, mungkin IronPython memegang janji, karena itulah dasarnya Python berjalan dalam lingkungan yang sudah aman; tapi sekali lagi ini adalah perubahan besar dari CPython kita semua datang untuk mengetahui dan cinta.

Sebagai pengganti salah satu dari mereka, saya akan menerapkan sesuatu seperti model keamanan ActiveX, seperti lumpuh seperti itu. Apa ini berarti bagi Anda adalah bahwa Anda akan harus menandatangani file P3D Anda ketika Anda menempatkan mereka pada sebuah situs web. ("Penandatanganan" file berarti menandai dengan kunci unik yang mengidentifikasi Anda sebagai pengembang Tidak apa-apa jika itu anonim,. Satu-satunya titik adalah bahwa itu unik.) Anda dapat mendaftar semua file P3D Anda dengan kunci yang sama. Ketika plugin web Panda3D datang di file P3D ditandatangani dengan kunci baru itu tidak mengakui, itu akan menawarkan pengguna pilihan apakah akan menyetujui kunci yang sebelum menjalankan aplikasi. Jika pengguna menyetujui kunci-yang berarti ia memberi Anda izin untuk menjalankan kode pada mesin-nya maka akan menjalankan file P3D, dan akan mengingat persetujuan pengguna untuk file P3D masa depan ditandatangani dengan kunci yang sama. Ini pada dasarnya adalah jenis yang sama dari persetujuan pengguna harus memberikan untuk men-download exe, sehingga tidak benar-benar mengganggu distribusi aplikasi, meskipun itu tidak membuatnya sedikit canggung jika Anda ingin memiliki berkas P3D Anda bermain secara otomatis yang pertama kali seseorang datang ke website Anda.

Ada kemungkinan lain untuk model keamanan yang berbeda di jalan, tapi saya pikir ini akan membahas masalah ini secara memadai untuk jangka pendek.

JavaScript integrasi
Kembali ke hal yang baik. Menjalankan sebuah aplikasi di sebuah kotak kecil pada halaman web adalah menyenangkan untuk sementara waktu, tapi itu tidak benar-benar membeli Anda banyak kecuali dapat berinteraksi dengan halaman web di sekitarnya.

Untuk menempatkan ini dalam konteks: Python dan JavaScript adalah bahasa yang sangat mirip; baik dukungan terlambat mengikat, penciptaan objek dinamis, dan mengetik bebek. Panda sudah cukup bagus di membungkus C + + objek untuk keuntungan Python; dibandingkan dengan ganjil itu, membungkus objek JavaScript adalah angin musim panas yang hangat. Jadi mengapa tidak melakukannya dengan benar, dan sepenuhnya mengekspos seluruh JavaScript ruang objek untuk mengarahkan manipulasi oleh Python?

Jadi, kita lakukan. Plugin Panda3D memungkinkan Anda untuk menulis kode Python yang terlihat seperti "document.getElementById ('form'). Greeting.value = 'hello'", yang tentu saja mengubah nilai bentuk pada halaman web, menggunakan model JavaScript DOM. Tapi kau menulis di Python. Bahkan, apa pun yang dapat melakukan JavaScript, program Python Anda bisa melakukan terlalu. Dan sebaliknya adalah benar juga: kami memungkinkan Anda untuk mengekspos objek Python pilihan Anda JavaScript, untuk memungkinkan halaman web untuk langsung menyodok nilai-nilai ke dalam aplikasi Anda, atau bahkan memanggil metode Python Anda!

Ini berarti Anda dapat dengan mudah mengintegrasikan Program web Panda3D Anda dengan program web lainnya, yang ditulis dalam JavaScript atau bahasa web-lain yang didukung. Sebagai contoh, saya telah menyediakan halaman demo yang menggambarkan Panda3D berinteraksi dengan Flash pada halaman yang sama bersama-sama, mengirim benda bolak-balik antara Panda dan Flash. Ketika plugin lebih selesai, saya akan memberikan ini halaman demo dan lain-lain untuk pemeriksaan umum.
Paket alat
Masih ada lebih terlibat di sini. Kemasan aplikasi Anda ke dalam sebuah file P3D tunggal semua baik dan bagus untuk aplikasi kecil, tapi bagaimana dengan aplikasi yang benar-benar besar seperti MMO, untuk yang Panda3D berutang asli raison d'ĂȘtre-nya? Pengguna Anda tidak akan ingin men-download file 200 MB P3D setiap kali mereka ingin bermain. Jadi, 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.

Masukkan sistem paket umum. Alat yang sama yang dapat membuat file P3D juga dapat membangun paket umum: 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. Sekarang ketika aplikasi Anda mendapatkan besar, Anda memiliki dua pilihan: Anda dapat bundel menjadi satu file P3D monolitik, dan membiarkan pengguna men-download semuanya di depan; atau Anda dapat membuat satu file P3D kecil yang diunduh pengguna pertama untuk mendapatkan ke dalam permainan-yang mungkin tidak lebih dari layar-dan judul maka Anda strategis dapat men-download seluruh kode dalam berbagai paket, sementara pengguna terus bermain bagian (s) yang telah Anda download.

Sistem paket juga akan secara otomatis mengintegrasikan dengan Panda built-in mekanisme patchfile, memungkinkan Anda untuk memberikan update tanpa memaksa pengguna untuk men-download benar-ulang seluruh aplikasi.
Juga, kita dapat menggunakan sistem ini paket yang sama untuk memberikan beberapa perpustakaan ekstensi, seperti pygame atau wx, hal-hal yang tidak ketat bagian dari Panda tetapi banyak aplikasi akan ingin mengambil keuntungan dari.
Anda juga dapat, tentu saja, model beban dan seperti langsung dari URL sewenang-wenang. Tapi Anda bisa melakukan itu hari ini, dengan menggunakan vfs-mount-url Config.prc setting; itu bukan fitur baru dari Panda (meskipun tidak mengambil relevansi baru dalam pengaturan berbasis web).
Versi Panda3D
Kami belum berbicara tentang berbagai versi Panda3D. Di sinilah ia mendapat yang baik: setiap file P3D tahu versi Panda3D yang digunakan untuk memproduksinya, dan hanya akan mencoba untuk menjalankan dengan versi yang sama dari Panda. Tapi runtime Panda3D itu sendiri versi-independen. Ketika Anda menjalankan file P3D khusus, runtime Panda3D akan mencari tahu apa versi Panda diperlukan. Jika versi yang belum diinstal pada komputer pengguna, ia akan pergi dan men-download terlebih dahulu. Ini adalah pekerjaan dari runtime Panda3D untuk mengelola berbagai versi Panda, dan untuk menjaga mereka semua terpisah dari satu sama lain; dan hal ini secara otomatis, tanpa pengguna bahkan perlu tahu bahwa hal itu terjadi. Bahkan, Anda bahkan dapat menjalankan dua versi yang berbeda dari Panda pada saat yang sama pada halaman web yang sama.
Ini berarti bahwa sekali Anda, atau pengguna, telah terinstal runtime Panda3D, Anda tidak perlu khawatir tentang memperbarui ketika versi baru dari Panda datang. Secara otomatis update sendiri sesuai kebutuhan. Hal ini berlaku untuk panda3d.exe mandiri serta untuk plugin browser. (Setiap sesekali mungkin ada update ke runtime itu sendiri, yang akan membutuhkan update eksplisit oleh pengguna. Tetapi upgrade dasar Panda3D atau paket yang tidak akan membutuhkan ini.)
Perhatikan bahwa runtime Panda3D akan cache semua ini paket download pada hard disk pengguna. Harus ada batas untuk jumlah mengkonsumsi ruang Panda, sehingga runtime akan memiliki untuk mengelola ruang ini dan secara otomatis menghapus yang lama, paket yang tidak terpakai dan versi. Tapi 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 menjejalkan semua ini dalam direktori cache yang relatif kecil web browser. Bahkan masih, jika Anda membutuhkan lebih banyak ruang untuk aplikasi Anda dari Panda biasanya menyediakan, Anda dapat mengambil-ingat, pengguna telah memberikan izin aplikasi Anda. :)
Kami juga akan menyediakan halaman web yang pengguna dapat mengunjungi mengelola / nya instalasi Panda3D nya, pemantauan file cache dan semacamnya, dan tweaking file konfigurasi global untuk / nya dia sukai.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS