Sabtu, 14 Juni 2014


Horde3D adalah open source mesin rendering 3D yang berukuran kecil. Hal ini ditulis dalam upaya untuk menciptakan sebuah mesin grafis yang menawarkan efek visual yang menakjubkan yang diharapkan bisa digunakan dalam game generasi mendatang, sementara pada saat yang sama menjadi seperti ringan dan konseptual sebersih mungkin. Horde3D memiliki tampilan antarmuka yang sederhana dan intuitif yang dikumpulkan dari hampir semua bahasa pemrograman dan sangat cocok untuk rendering banyak animasi dengan kualitas generasi mendatang.
Horde3D didistribusikan di bawah ketentuan Eclipse Public License (EPL).
EPL adalah lisensi cukup liberal dan menerapkan batasan kurang dari populer LGPL. Pada dasarnya ini memungkinkan Anda untuk menggunakan Horde3D dalam proyek-proyek gratis dan komersial selama Anda berkontribusi perbaikan seperti perbaikan bug, optimasi dan refactorings kode kembali kepada masyarakat. EPL memungkinkan menghubungkan statis dan tidak virus, maka hal itu tidak mempengaruhi modul lain dari aplikasi Anda.
Horde3D memerlukan sepenuhnya OpenGL 2.0 kartu grafis yang kompatibel. Dalam hal DirectX harus menggunakan VGA Card yang mendukung setidaknya Shader Model 2.0 atau lebih baik. Oleh karena itu perangkat keras minimum yang diperlukan untuk menjalankan aplikasi menggunakan Horde3D adalah FX NVidia GeForce atau ATI Radeon 9500 graphics accelerator.

Fitur Horde 3D

  • Mesin grafis yang kuat yang dirancang untuk memenuhi persyaratan game generasi mendatang
  • Arsitektur berbasis shader modern dengan SM 2.0 hardware yang kompatibel sebagai persyaratan minimum
  • Cross-platform yang kompatibel dengan menggunakan OpenGL sebagai render API
  • Keseluruhan desain elegan dan ringan dengan sangat sedikit dependensi, menghindari kompleksitas di mana mungkin
  • Clean berorientasi obyek C + + kode yang ditulis untuk kinerja
  • Modularitas yang kuat dan abstraksi tinggi melalui datar C-style DLL API (juga memungkinkan untuk menggunakan Horde3D dari hampir semua bahasa pemrograman)
  • Mudah integrasi dengan mesin permainan dan middleware lainnya seperti mesin fisika karena desain API non-intrusif
  • Cocok untuk Augmented Reality (AR) dan aplikasi stereo
  • Pengelolaan sumber daya yang kuat dengan pengumpulan sampah intern
  • Antarmuka untuk memuat data dari file, sungai atau jenis arsip
  • Hot-reload sumber daya untuk lebih meningkatkan produktivitas selama pengembangan
  • Struktur pohon adegan ringan dengan transformasi hirarkis dan volume melompat-lompat
  • Sistem terpadu di mana adegan dunia, model dan kerangka hanya adegan cabang grafik dan tidak ada benda-benda khusus
  • Memuat adegan cabang grafik dari file XML dengan orthogonality lengkap untuk fungsi API
  • Frustum pemusnahan berdasarkan grafik spasial
  • Hardware oklusi pemusnahan
  • Tingkat dukungan detail untuk model geometri dan bahan
  • Kemungkinan untuk melampirkan adegan node untuk sendi (misalnya untuk karakter alat peraga)
  • Akses ke data vertex untuk deteksi tabrakan dan interoperabilitas dengan mesin fisika
  • Ray query tabrakan dan simpul picking
  • Übershader berbasis sistem efek / bahan dengan generasi shader permutasi otomatis (menggunakan shader GLSL)
  • Rendering pipeline disesuaikan berbasis XML dengan dialokasikan membuat target dan perintah untuk pengujian cepat teknik rendering yang berbeda
  • Kerangka postprocessing untuk efek seperti mekar, DOF atau motion blur
  • Dukungan untuk render maju dan teknik shading tangguhan yang berbeda
  • Dukungan untuk High Dynamic Range (HDR) tekstur dan pencahayaan
  • Dukungan untuk hampir semua teknik render modern, termasuk pencahayaan phong normal dipetakan dan pemetaan paralaks
  • Dukungan untuk refleksi real-time dan teknik lain yang memerlukan beberapa kamera untuk rendering
  • Bayangan realtime menggunakan Paralel Berpisah Bayangan Maps (PSSM)
  • Software menguliti dan menguliti hardware di vertex shader untuk rendering ratusan karakter animasi
  • Sistem partikel terintegrasi yang dapat melemparkan bayangan dan memiliki efek seperti blur
  • Overlay untuk rendering elemen GUI dan huruf
  • Tingkat rendah sistem animasi terpadu bekerja secara langsung di tempat kejadian grafik
  • Animasi keyframe untuk sendi dan jerat
  • Animasi Skeletal sampai dengan 4 bobot per titik untuk model diartikulasikan
  • Animasi Layered pencampuran dan pencampuran menggunakan masker dan saluran aditif
  • Inter-interpolasi frame untuk animasi halus
  • Akses ke data bersama untuk animasi dinamis dan fisika Ragdoll
  • Morph target untuk animasi wajah dan sinkronisasi bibir
  • Model dan animasi format kustom dioptimalkan untuk kinerja maksimum
  • Campuran format biner dan XML untuk tradeoff terbaik antara kinerja dan produktivitas
  • Dukungan untuk DDS tekstur dan format gambar umum lainnya
  • Collada Converter untuk membawa aset dari banyak alat DCC umum untuk Horde3D
  • Collada Converter diimplementasikan sebagai tool baris perintah yang dapat diintegrasikan dalam proses membangun otomatis
  • Perhitungan dasar ruang singgung untuk pemetaan yang normal
  • Optimasi geometri untuk GPU pasca-transform vertex Cache
  • Data-driven pipa render untuk beralih lurus antara teknik rendering yang berbeda
  • Editor handal untuk menyusun adegan dan mengembangkan shader dan teknik render
 
Ada banyak diskusi tentang apa yang membuat NextGen permainan tetapi pada apa yang kebanyakan orang setuju adalah bahwa anda memiliki banyak detail, gameplay mendalam dan dunia hidup. Horde3D mencoba untuk melakukan keadilan untuk persyaratan ini dari perspektif mesin grafis. Horde memiliki arsitektur shader didorong yang memungkinkan untuk melakukan paling canggih grafis efek seperti pemetaan paralaks atau HDR. Selain itu, adalah mungkin untuk menggabungkan mesin dengan middleware spesifik lainnya. Misalnya, adegan grafik dan animasi sistem yang dirancang dengan cara yang dapat Anda gunakan animasi dinamis dihitung oleh IK atau sistem Ragdoll. Hal lain adalah bahwa Horde3D dioptimalkan untuk rendering kerumunan besar karakter animasi yang juga fitur di beberapa game baru.

Adegan grafik dan animasi sistem lengkap yang dirancang dengan persyaratan ini dalam pikiran. Misalnya, Horde3D mencoba untuk tetap memiliki hirarki simpul kecil untuk mengurangi panggilan overhead dan menggunakan data cache untuk animasi lebih cepat. Geometri ini dioptimalkan untuk penggunaan cache yang efisien dan Anda dapat menggunakan beberapa tingkat detail untuk model. Selain itu, adalah mungkin untuk menggunakan vertex menguliti dan menerapkan shading ditangguhkan untuk mengurangi jumlah panggilan menarik untuk adegan dengan banyak lampu.
 
Salah satu tujuan utama dari Horde3D adalah untuk menjaga desain dan kode sederhana dan jelas. Namun demikian, kita tidak ingin ada kompromi ketika datang ke fungsionalitas dan fleksibilitas. Bagian yang baik dari upaya pembangunan dihabiskan untuk menemukan konsep-konsep yang memenuhi persyaratan kadang-kadang bertentangan. Kunci ini adalah abstraksi dan orthogonality yang membantu untuk mengurangi jumlah kasus-kasus khusus dan dengan demikian untuk menjaga kode kecil dan juga komprehensif.
 
Konsep Umum Horde3D
Horde3D memiliki strategi integrasi yang berbeda dari mesin grafis terkenal lainnya seperti OGRE 3D atau Irrlicht. Sementara ini menyediakan perpustakaan kelas berorientasi objek dari mana pengguna dapat memperoleh implementasi sendiri, Horde3D harus lebih dianggap sebagai komponen perangkat lunak. Sebagai Horde3D tersebut memiliki tingkat abstraksi yang lebih tinggi dan dapat diakses melalui antarmuka prosedural cukup kecil yang ada di beberapa konsep yang mirip dengan Microsoft Win32 API. Sebuah antarmuka C-gaya sederhana memiliki keuntungan menjadi lebih mudah untuk ikhtisar dan belajar karena hanya menawarkan apa yang sebenarnya dibutuhkan oleh pengguna. Manfaat lain adalah portabilitas yang lebih baik. Hampir semua bahasa pemrograman dan scripting memiliki beberapa mekanisme untuk mengakses fungsi-fungsi penting dalam shared library, sedangkan mengimpor kelas yang lebih rumit atau tidak mungkin sama sekali. Bahkan beberapa bungkus telah ditulis untuk antarmuka asli, sehingga Horde3D dengan mudah dapat digunakan dengan C #, Java, LUA dan bahasa lainnya.
Antarmuka prosedural tidak menjaga mesin dari yang digunakan dalam bahasa berorientasi objek. Secara internal Horde3D sendiri secara ketat berorientasi objek. Benda Mesin itu seperti adegan node grafik dan sumber daya yang terkena aplikasi melalui pegangan. Sebuah pegangan mirip dengan pointer tetapi menambahkan tingkat tambahan tipuan untuk memberikan keamanan lebih. Horde3D memiliki fungsi khusus untuk membuat objek yang selalu kembali pegangan ke objek dibangun atau NULL-handle (pada dasarnya sama dengan NULL-pointer) jika terjadi kegagalan. Pegangan harus disimpan oleh aplikasi dan dapat digunakan untuk mengakses objek dalam rangka untuk mengubah sifat atau melepaskannya.
Karena tingkat abstraksi tinggi antarmuka pemrograman aplikasi, tidak mungkin bagi pengguna untuk menambahkan fungsi grafis kustom seperti jenis adegan node baru tanpa memodifikasi kode sumber mesin. Untuk mengatasi kelemahan ini, Horde3D menyediakan mekanisme perpanjangan dimana pengguna memiliki akses penuh ke kerangka kelas internal Horde3D. Perpanjangan selesai secara statik terkait dengan shared library mesin dan mengekspos fungsionalitas melalui antarmuka kustom prosedural. Mekanisme perpanjangan juga sangat memudahkan proses upgrade Horde3D dengan fungsi pihak ketiga tambahan.
Manajemen Sumber Daya
Sebuah sumber daya adalah objek data yang dibutuhkan untuk membuat adegan, misalnya tekstur atau shader. Salah satu sifat penting dari sumber daya adalah bahwa mereka dapat digunakan kembali. Ini berarti bahwa mereka dapat direferensikan oleh beberapa objek yang berbeda seperti adegan node tetapi hanya harus dimuat sekali. Setiap sumber daya diidentifikasi dengan nama yang unik untuk jenis sumber daya dan dimana sumber daya dapat dirujuk dari benda-benda lain.
Semua sumber daya yang dikelola oleh manajer sumber daya. Manajer sumber daya berisi daftar sumber daya dan memastikan bahwa mereka hanya dimuat sekali dan digunakan kembali setelah itu. Hal ini juga bertanggung jawab untuk mencari, mengakses dan menghapus sumber daya. Berbeda dengan beberapa mesin lainnya, Horde3D menggunakan satu manajer tunggal untuk semua sumber daya dan tidak   

yang berbeda untuk setiap jenis sumber daya. Untuk membuat penanganan sumber daya yang lebih kuat, manajer menerapkan referensi menghitung. Sebuah sumber daya hanya dapat dihapus jika tidak lagi direferensikan oleh beberapa objek lain, misalnya sumber daya lain atau adegan simpul. Hal ini juga memungkinkan untuk melakukan pengumpulan sampah eksplisit untuk melepaskan dan menghapus semua sumber daya yang tidak terpakai.
Horde3D menggunakan beban tangguhan sumber daya. Ini berarti bahwa penciptaan sumber daya dan pemuatan adalah langkah-langkah diskrit. Pemisahan ini membawa keuntungan bahwa data tidak harus tersedia segera ketika sumber daya tersebut akan ditambahkan dan membuatnya pada prinsipnya mungkin untuk memiliki thread khusus untuk latar belakang pemuatan. Ketika sumber daya yang diciptakan, sekarang diinisialisasi dengan data default-jenis tertentu dan telah tersedia untuk direferensikan oleh benda-benda lain. Setelah penciptaan sumber daya dapat dimuat dan diisi dengan data yang diinginkan. Dalam proses ini struktur data dasar yang mengatur dan diinisialisasi. Setelah loading biasanya mungkin untuk mengubah nilai-nilai data sumber daya, tetapi tidak struktur data. Untuk tekstur sebagai contoh ini berarti bahwa nilai-nilai warna semua pixel dapat diubah tetapi tidak dimensi atau kedalaman warna gambar. Ketika sumber daya telah dimuat, itu tidak dapat dimuat lagi tapi mungkin untuk membongkar sumber daya dan dengan demikian mengatur ulang ke keadaan awal itu langsung setelah penciptaan.
Pemuatan sumber daya benar-benar virtual di Horde3D. Mesinnya tidak melakukan mengakses file apapun dan hanya mengharapkan sebuah blok memori dari aplikasi. Terserah aplikasi untuk memutuskan dari mana untuk mendapatkan blok ini, misalnya untuk membacanya dari file yang sesuai. Keuntungan dari sistem ini adalah bahwa Horde3D tidak memaksa pengguna untuk memiliki beberapa format arsip tertentu. Data sumber daya bisa berasal dari sumber manapun dan bahkan bisa dialirkan melalui jaringan. Hal ini juga memungkinkan untuk menghasilkan blok data secara dinamis untuk mewujudkan konten prosedural.
Scenegraph
Sebuah sumber adegan grafik adalah dokumen XML yang mendefinisikan cabang dari adegan grafik. Setiap elemen XML ditafsirkan sebagai adegan simpul sesuai dengan namanya. Struktur XML node langsung dipetakan ke hirarki scene. Semua sifat-sifat node adegan yang dapat diakses melalui Horde3D API juga dapat dikonfigurasi dengan menetapkan atribut XML yang sesuai. Salah satu fitur khusus dari Horde3D adalah bahwa semua model 3D, yang statis dan diartikulasikan, juga direpresentasikan sebagai file scenegraph. Hal ini memungkinkan untuk mengakses komponen dari model seperti jerat dan sendi menggunakan adegan grafik API dan menghindari kebutuhan untuk fungsi-fungsi khusus tambahan.
Sebuah adegan grafik digunakan untuk mewakili struktur logis atau spasial dari adegan yang akan diberikan. Biasanya juga berfungsi untuk mempercepat pencarian dan permintaan operasi berbasis adegan seperti frustum pemusnahan atau pertanyaan tabrakan. Dalam prakteknya banyak desain grafik adegan dan implementasi yang berbeda ada, semua dengan kelebihan dan kekurangan. Beberapa mesin mewujudkan organisasi adegan mereka sebagai grafik nyata diarahkan atau tidak diarahkan dan beberapa bahkan memungkinkan siklus. Lainnya hanya menerapkan pohon sederhana. Pertanyaan lain desain penting mempengaruhi sifat relasional dari suatu entitas. Sebagai contoh, bagaimana seharusnya bahan mesh direalisasikan? Apakah harus node induk mesh, lampiran untuk mesh atau lebih tepatnya hanya sebuah atribut? Hal ini dimungkinkan untuk membuat desain yang sangat kuat tetapi biasanya ada tradeoff yang jelas antara fleksibilitas dan kinerja karena struktur grafik yang lebih kompleks lebih mahal untuk melintasi. Sebagai Horde3D awalnya ditulis untuk membuat kerumunan besar karakter animasi, ia mencoba untuk menemukan keseimbangan yang baik antara fleksibilitas dan biaya kinerja yang melekat.
Di Horde3D adegan grafik diwujudkan sebagai struktur pohon. Setiap node dapat memiliki jumlah sewenang-wenang anak-anak tetapi mesin memberlakukan beberapa pembatasan untuk hirarki dan mendefinisikan aturan penyusunnya yang tipe node dapat dilampirkan ke apa yang orang tua. Sebagai aturan praktis entitas hanya beton yang memiliki transformasi dan karenanya lokasi di dunia maya yang direpresentasikan sebagai node. Semua entitas abstrak lain seperti bahan direalisasikan sebagai atribut node. Filosofi ini membuat jumlah node dalam grafik relatif kecil dan memungkinkan operasi lebih cepat di pohon.
Setiap node memiliki dua transformasi, lokal dan yang global. Transformasi lokal, kadang-kadang juga disebut transformasi obyek, relatif terhadap orang tua dan dapat diatur secara eksplisit oleh aplikasi. Satu global (transformasi dunia) dihitung secara otomatis dengan melintasi hirarki orangtua-anak dan mengumpulkan transformasi. Jadi, ketika sebuah node berubah, semua anak-anaknya diubah sesuai. Jika, misalnya, adegan lengkap harus diputar, itu sudah cukup untuk mengubah simpul akar dan mesin berputar semua anak secara otomatis. Setiap node juga memiliki kotak loncat sumbu-blok yang merupakan gabungan dari kotak melompat-lompat dari anak-anaknya. Hirarki Volume loncat muncul digunakan oleh Horde3D untuk mengoptimalkan algoritma deteksi visibilitas.
Untuk setiap tipe node ada fungsi penciptaan tertentu yang mengambil satu set parameter yang berbeda. Kebanyakan parameter dapat diubah setelah penciptaan tetapi beberapa yang sangat penting untuk struktur internal node yang berubah. Dasar atribut umum untuk semua node adegan diakses dengan fungsi API umum. Untuk mendapatkan atau menetapkan sifat-jenis tertentu, API menyediakan fungsi-fungsi khusus yang biasanya membutuhkan pegangan ke node adegan dari jenis yang sesuai.

Geometri
Geometri sumber yang diambil dari file biner dan menyimpan data poligonal yang digunakan oleh model dan jerat. Sumber daya yang mengandung indeks segitiga dan beberapa aliran untuk atribut vertex seperti posisi, normals, tangen, koordinat tekstur dan berat bersama. Hal ini juga dapat mencakup informasi tambahan tentang kerangka model dan data stream terpisah untuk target morph.
Animasi
Sebuah sumber animasi keyframe berisi data untuk node animatable. Kedua jenis node animatable di Horde3D adalah jerat dan sendi. Tesis node diidentifikasi dengan nama mereka dan menyimpan transformasi lokal untuk setiap frame dalam bentuk vektor terjemahan, vektor skala dan angka empat rotasi.
Pipa saluran/Pipeline
Pipa A adalah dokumen XML yang mendefinisikan langkah-langkah yang akan dilakukan untuk rendering adegan. Pipa ini berisi daftar membuat perintah terorganisir dalam tahap yang menentukan geometri yang diberikan kepada apa output buffer. Setiap pipa dapat memiliki jumlah sewenang-wenang buffer output yang berbeda yang disebut target render. Render target dapat menyimpan hasil render sementara yang dibutuhkan dalam tahap berikutnya. Dalam kombinasi dengan shader, pipa dikonfigurasi adalah sistem yang kuat yang memungkinkan untuk mewujudkan banyak teknik render modern seperti shading ditangguhkan dan efek post-processing canggih lainnya.


Material
Material/Bahan menentukan tampilan visual mesh atau benda renderable pada umumnya. Material referensi A shader dan mengikat seragam untuk itu. Seragam dapat menjadi peta tekstur, floating vektor titik yang lulus data spesifik aplikasi sewenang-wenang untuk shader.
Shader
Sebuah shader di Horde3D telah memperpanjang semantik dibandingkan dengan gagasan biasa karena tidak hanya kode dieksekusi oleh kartu grafis. Ide dasar dari konsep shader Horde3D adalah bahwa model harus diambil dalam berbagai tahap proses rendering dengan shader yang berbeda. Menghasilkan bayangan peta misalnya memerlukan kode shader selain menghitung pencahayaan sekitarnya. Jadi di Horde3D sumber daya shader adalah sekelompok program dieksekusi dalam konteks yang berbeda. Sepasang tunggal vertex dan fragmen kode program disebut konteks shader. Pipa biasanya memilih konteks shader yang membutuhkan untuk langkah saat ini. Kode shader sebenarnya dari konteks yang dieksekusi oleh kartu grafis ditentukan dalam OpenGL Shading Language.
Code
Sebuah sumber kode adalah file teks biasa yang dapat berisi kode sewenang-wenang. Sumber kode dapat direferensikan oleh sumber daya shader dan biasanya digunakan untuk menentukan program fragmen shader dalam mode dapat digunakan kembali.
Texture
Sebuah sumber daya tekstur dapat berisi peta tekstur dua dimensi atau peta kubus. Sebuah peta tekstur 2D hanya merupakan sebuah gambar. Tekstur 2D digunakan oleh shader untuk menentukan penampilan permukaan tetapi mereka juga dapat mengkodekan data non-fotografi seperti orang normal atau tabel. Peta Cube adalah bentuk khusus dari peta tekstur yang terdiri dari serangkaian enam gambar yang sesuai dengan sisi kubus. Peta kubus mewakili lingkungan di sekitar titik. Oleh karena itu, adalah mungkin untuk menggunakan vektor tiga dimensi untuk mencari Texel yang terletak pada arah yang sesuai.


ParticleEffect
Sebuah sumber daya efek partikel yang digunakan untuk mengkonfigurasi sistem partikel. Sumber daya yang mendefinisikan di mana cara sifat-sifat partikel seperti warna, ukuran dan kecepatannya berubah selama masa pakai baterai. Sumber ParticleEffect biasanya ditugaskan ke emitor node yang melahirkan partikel.
Group
Sebuah kelompok node wadah generik untuk node lain. Simpul akar misalnya adalah dari tipe tersebut. Kelompok node memiliki dua atribut yang menentukan minimum dan jarak maksimum dari mana node (dan semua anak-anaknya) terlihat. Atribut ini berguna untuk mewujudkan tingkat berdasarkan jarak sederhana skema detail.
Camera
Sebuah adegan selalu diberikan dari perspektif kamera virtual yang hanya adegan simpul khusus di Horde3D. Ini memberikan semua fleksibilitas dari sistem grafik adegan juga untuk kamera dan membuatnya misalnya mungkin untuk melampirkan kamera ke sendi dari model animasi, sehingga secara otomatis berubah sesuai dengan model animasi.
Light/Cahaya
Sumber cahaya yang digunakan untuk setup pencahayaan adegan. Node memiliki beberapa parameter yang menentukan sifat sumber cahaya seperti warna cahaya, radius pengaruh dan bidang pandang untuk lampu spot. Bayangan juga dapat disesuaikan dengan menggunakan atribut yang sesuai. Sebuah titik khusus yang menarik adalah bahwa material dapat ditugaskan untuk sumber cahaya. Hal ini diperlukan untuk shading tangguhan mana pencahayaan dilakukan sebagai langkah post-processing dengan cahaya-sumber tertentu unified shader. Untuk melakukan standar maju shading, sumber cahaya memberikan pencahayaan konteks atribut yang mendefinisikan konteks shader digunakan untuk menghitung intensitas penerangan.




Model
Sebuah model simpul merupakan objek 3D poligonal yang biasanya telah diekspor dari beberapa perangkat lunak pemodelan seperti Blender atau 3D Studio Max. Model ini dapat menjadi objek statis atau karakter diartikulasikan. Node referensi sumber daya geometri yang berisi data poligonal nya. Node Model bertindak sebagai wadah abstrak untuk jerat dan sendi, dan dapat animasi dengan sumber daya animasi. Sebuah model dengan sendirinya tidak renderable dan membutuhkan mesh untuk menjadi terlihat. Biasanya node dengan model sendi dan jerat dibuat secara otomatis oleh alat ekspor atau konversi dan disimpan dalam grafik sumber daya adegan.
Mesh
Node Mesh mendefinisikan sekelompok poligon dengan bahan tunggal. Setiap jala merupakan bagian dari sumber daya geometri dan ditarik oleh penyaji menggunakan bahan terkait. Karena jerat menunjuk ke sumber daya geometri, mereka membutuhkan model node induk di suatu tempat ke atas dalam hirarki.
Joint/Jerat
Sebuah hirarki node gabungan digunakan untuk mewakili kerangka untuk animasi skeletal. Sebagai jerat, node gabungan hanya bisa eksis dengan model-nenek moyang dalam hirarki grafik adegan. Setiap sendi memiliki atribut indeks yang menunjuk ke suatu matriks mengikat dalam sumber daya geometri model. Matriks mengikat ini digunakan oleh mesin untuk melakukan menguliti.
Emitter
Node emitor digunakan untuk sistem partikel setup. Mereka bertanggung jawab untuk menciptakan partikel berdasarkan deskripsi dari sumber daya ParticleEffect dan memiliki beberapa parameter untuk mengkonfigurasi sifat seperti angka kelahiran atau jumlah maksimum partikel.
 

Horde3D adalah render 3D open source kecil tapi kuat dan mesin animasi. Hal ini ditulis dalam upaya untuk menciptakan sebuah mesin grafis yang dapat bersaing dengan kualitas dan kinerja dari mesin generasi komersial, sementara pada saat yang sama menjadi ringan dan konseptual bersih. Meskipun Horde memiliki berat berorientasi objek struktur internal tidak harus dianggap sebagai perpustakaan kelas tapi komponen mandiri dengan antarmuka generik didefinisikan dengan baik. Antarmuka API terkena dengan cara C-gaya dan membuatnya sehingga memungkinkan untuk menggunakan mesin dari hampir semua bahasa pemrograman dengan sedikit usaha. Sebuah titik khusus yang menarik untuk desain mesin adalah kemampuan untuk membuat kerumunan besar karakter animasi dengan kualitas unggul, meskipun mesin sama sekali tidak terbatas pada hal semacam aplikasi.
Salah satu tujuan desain yang paling penting dari Horde3D adalah untuk menjaga hal-hal sederhana dan menghindari kompleksitas di mana mungkin tanpa mengorbankan fleksibilitas atau produktivitas.Bagian yang baik dari upaya pembangunan dihabiskan untuk menemukan konsep-konsep untuk mencapai tujuan-tujuan kadang-kadang bertentangan.Hasilnya adalah bahwa Horde memiliki manajemen sumber daya dirancang dengan baik dan sistem grafik adegan yang memberi Anda kontrol tanpa perlu untuk banyak fungsi yang beragam. Selanjutnya mesin memiliki sistem animasi yang kuat yang mendukung tulang dan kaku animasi dengan pencampuran yang lengkap dan kemampuan pencampuran dan morph target untuk ekspresi wajah. Sebagian besar kekuatan dan fleksibilitas dari mesin berasal dari perusahaan arsitektur shader didorong dan pipa disesuaikan yang memungkinkan untuk menerapkan hampir semua rendering dan pengolahan pasca teknik modern.




Tutorial Sederhana
Pada bagian ini kita akan membuat sebuah aplikasi sederhana yang memuat karakter dan menjiwai menggunakan siklus berjalan. Anda akan melihat bagaimana mudah itu adalah dengan menggunakan Horde3D API. Sebagai langkah pertama Anda harus membuat sebuah aplikasi yang akan membuka jendela yang dapat digunakan untuk rendering. Ini adalah tugas yang cukup standar dan jika Anda seorang pemula dan memiliki masalah dengan itu pada Anda menggunakan platform yang google untuk menemukan salah satu dari banyak tutorial yang baik di internet atau lihat di sampel yang datang dengan Horde3D SDK. Langkah berikutnya adalah untuk menginisialisasi konteks OpenGL untuk jendela render kami. Anda dapat melakukannya secara manual atau menggunakan Horde3D Utilitas Library untuk membuat hidup Anda lebih mudah. Setelah itu dilakukan kita akhirnya bisa sampai ke bagian mesin yang terkait.
#include <Horde3D.h>
#include <Horde3DUtils.h>

H3DNode model = 0, cam = 0;

void initGame( int winWidth, int winHeight )
{
    // Initialize engine
    h3dInit();
  
    // Add pipeline resource
    H3DRes pipeRes = h3dAddResource( H3DResTypes::Pipeline, "standard.pipeline.xml", 0 );
    // Add model resource
    H3DRes modelRes = h3dAddResource( H3DResTypes::SceneGraph, "character.scene.xml", 0 );
    // Add animation resource
    H3DRes animRes = h3dAddResource( H3DResTypes::Animation, "walk.anim.xml", 0 );
    // Load added resources
    h3dutLoadResourcesFromDisk( "" );
   
    // Add model to scene
    model = h3dAddNodes( H3DRootNode, modelRes );
    // Apply animation
    h3dSetupModelAnimStage( model, 0, animRes, 0, "", false );
   
    // Add light source
    H3DNode light = h3dAddLightNode( H3DRootNode, "Light1", 0, "LIGHTING", "SHADOWMAP" );
    // Set light position and radius
    h3dSetNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );
    h3dSetNodeParamF( light, H3DLight::RadiusF, 0, 50.0f );
       
    // Add camera
    H3DNode cam = h3dAddCameraNode( H3DRootNode, "Camera", pipeRes );

    // Setup viewport and render target sizes
    h3dSetNodeParamI( cam, H3DCamera::ViewportXI, 0 );
    h3dSetNodeParamI( cam, H3DCamera::ViewportYI, 0 );
    h3dSetNodeParamI( cam, H3DCamera::ViewportWidthI, winWidth );
    h3dSetNodeParamI( cam, H3DCamera::ViewportHeightI, winHeight );
    h3dSetupCameraView( cam, 45.0f, (float)winWidth / winHeight, 0.5f, 2048.0f );
    h3dResizePipelineBuffers( pipeRes, winWidth, winHeight );
}

Baris pertama dari kode di atas menyatakan dua pegangan global untuk Horde adegan node grafik. Semua benda di Horde dapat diakses melalui menangani, konsep yang mirip dengan pointer. Hal pertama yang perlu kita lakukan dalam fungsi initGame kami untuk menggunakan Horde3D inisialisasi mesin. Hal ini terjadi dengan fungsi h3dInit.
Langkah berikutnya adalah untuk memuat sumber daya yang diperlukan. Dalam sumber Horde adalah file data yang dimuat sekali dan dapat direferensikan oleh beberapa objek untuk rendering. Fungsi h3dAddResource mengambil tipe sumber daya kita ingin menambahkan dan nama sumber daya (biasanya nama file) sebagai parameter dan mengembalikan pegangan ke objek sumber daya yang diciptakan. Dalam kasus kami, kami ingin model yang direpresentasikan sebagai file grafik adegan di Horde dan tambahan animasi. Sekarang sumber daya diciptakan tetapi kita masih perlu untuk memuat mereka. Horde mendukung pemuatan dari sumber termasuk arsip dienkripsi atau jaringan tetapi dalam kasus ini kita hanya ingin memuat sumber daya kami dari hard disk lokal yang dilakukan dengan fungsi utilitas h3dutLoadResourcesFromDisk. Disamping itu model dan animasi kami, kami juga memuat sumber daya pipa. Sebuah pipa mendefinisikan bagaimana adegan yang diberikan dan dapat digunakan untuk mewujudkan efek post-processing atau tinggi kisaran render dinamis. Untuk awal Anda hanya dapat menggunakan file yang datang dengan sampel SDK.
Setelah kami telah dimuat sumber daya yang diperlukan kita akhirnya dapat membangun grafik adegan. Adegan grafik mewakili benda-benda di dunia maya kita dalam struktur pohon hirarkis. Pertama kita menambahkan model yang telah kita dimuat sebelumnya. Kami menggunakan h3dAddNodes fungsi untuk melakukan hal ini yang membutuhkan sumber daya grafik adegan dan node induk. Orangtua adalah obyek adegan dimana node baru terpasang, dalam kasus kami hanya simpul akar yang merupakan basis dari dunia maya. Mirip dengan h3dAddResource, fungsi ini juga kembali pegangan untuk adegan grafik dibuat subtree. Setelah itu kita menetapkan animasi dimuat ke node model kami dengan fungsi h3dSetupModelAnimStage. Horde memungkinkan Anda untuk menerapkan beberapa animasi yang berbeda untuk model dan memungkinkan untuk berbaur dan campuran mereka tetapi untuk awal yang harus cukup. Sekarang bahwa menambahkan model selesai kita masih membutuhkan sumber cahaya. Ini akan mungkin untuk memuat file grafik adegan lain yang berisi sumber cahaya tapi kami ingin menambahkannya secara manual dengan menggunakan fungsi h3dAddLightNode. Fungsi ini memerlukan beberapa parameter menentukan shader digunakan untuk rendering. Informasi lebih lanjut tentang hal ini dapat ditemukan di bagian lain dari manual. Langkah berikutnya adalah untuk mengatur posisi dan orientasi yang dilakukan dengan h3dSetNodeTransform. Setelah itu kita tentukan radius cahaya yang mendefinisikan zona pengaruh menggunakan h3dSetNodeParamF. Akhirnya kami masih membutuhkan kamera yang mewakili pemirsa. Hal ini ditambah dengan fungsi h3dAddCameraNode dan mengambil sumber daya pipa dimuat kami sebagai parameter. Parameter pandang kamera dan membuat target sumber daya pipa tergantung pada ukuran jendela render. Jadi pada langkah terakhir kita menerapkan pengaturan viewport ke node kamera dan mengubah ukuran buffer output pipa.
void gameLoop( float fps )
{
    static float t = 0;
    
    // Increase animation time
    t = t + 10.0f * (1 / fps);
    
    // Play animation
    h3dSetModelAnimParams( model, 0, t, 1.0f );
    
    // Set new model position
    h3dSetNodeTransform( model, t * 10, 0, 0,  // Translation
                         0, 0, 0,              // Rotation
                         1, 1, 1 );            // Scale
                                                                               
    // Render scene
    h3dRender( cam );
    
    // Finish rendering of frame
    h3dFinalizeFrame();
}
 
 
void releaseGame()
{
    // Release engine
    h3dRelease();
}

Fungsi berikutnya dalam sampel kami adalah loop permainan yang dipanggil sekali setiap frame. Di sini kita akan menghidupkan karakter model kami. Untuk melakukan hal ini kita mendefinisikan counter waktu yang meningkat pada setiap frame. Untuk membuat kecepatan animasi independen dari framerate, kita skala langkah waktu oleh kebalikan dari frame per saat ini nilai kedua. Setelah itu kita memberitahu mesin untuk memperbarui model animasi menggunakan fungsi h3dSetModelAnimParams. Kita juga bisa menentukan berat campuran untuk menggabungkan animasi di sini tapi karena kita hanya memiliki satu animasi kita tidak perlu itu. Sekarang kita dapat menggantikan karakter kita sedikit sehingga bergerak melalui TKP. Hal ini dicapai dengan memperbarui model simpul transformasi. Akhirnya kita perlu memberitahu mesin untuk membuat adegan dan menghitung ulang model animasi. Hal ini terjadi dengan h3dRender fungsi yang mengharapkan kamera dari mana adegan tersebut dilihat. Langkah terakhir adalah untuk menginformasikan mesin render yang untuk frame selesai sekarang.
Fungsi releaseGame terakhir dipanggil saat aplikasi ditutup. Yang harus kita lakukan di sini adalah membebaskan mesin dengan fungsi h3dRelease.


Konsep umum horde 3d
Horde3D memiliki strategi integrasi yang berbeda dari mesin grafis terkenal lainnya seperti OGRE 3D atau Irrlicht.Sementara ini menyediakan perpustakaan kelas berorientasi objek dari mana pengguna dapat memperoleh implementasi sendiri, Horde3D harus lebih dianggap sebagai komponen perangkat lunak.Sebagai Horde3D tersebut memiliki tingkat abstraksi yang lebih tinggi dan dapat diakses melalui antarmuka prosedural cukup kecil yang ada di beberapa konsep yang mirip dengan Microsoft Win32 API. Sebuah antarmuka C-gaya sederhana memiliki keuntungan menjadi lebih mudah untuk ikhtisar dan belajar karena hanya menawarkan apa yang sebenarnya dibutuhkan oleh pengguna. Manfaat lain adalah portabilitas yang lebih baik. Hampir semua bahasa pemrograman dan scripting memiliki beberapa mekanisme untuk mengakses fungsi-fungsi penting dalam shared library, sedangkan mengimpor kelas yang lebih rumit atau tidak mungkin sama sekali. Bahkan beberapa bungkus telah ditulis untuk antarmuka asli, sehingga Horde3D dengan mudah dapat digunakan dengan C #, Java, LUA dan bahasa lainnya.
Antarmuka prosedural tidak menjaga mesin dari yang digunakan dalam bahasa berorientasi objek.Secara internal Horde3D sendiri secara ketat berorientasi objek.Benda Mesin itu seperti adegan node grafik dan sumber daya yang terkena aplikasi melalui pegangan.Sebuah pegangan mirip dengan pointer tetapi menambahkan tingkat tambahan tipuan untuk memberikan keamanan lebih. Horde3D memiliki fungsi khusus untuk membuat objek yang selalu kembali pegangan ke objek dibangun atau NULL-handle (pada dasarnya sama dengan NULL-pointer) jika terjadi kegagalan. Pegangan harus disimpan oleh aplikasi dan dapat digunakan untuk mengakses objek dalam rangka untuk mengubah sifat atau melepaskannya.


 Karena tingkat abstraksi tinggi antarmuka pemrograman aplikasi, tidak mungkin bagi pengguna untuk menambahkan fungsi grafis kustom seperti jenis adegan node baru tanpa memodifikasi kode sumber mesin.Untuk mengatasi kelemahan ini, Horde3D menyediakan mekanisme perpanjangan dimana pengguna memiliki akses penuh ke kerangka kelas internal Horde3D. Perpanjangan selesai secara statik terkait dengan shared library mesin dan mengekspos fungsionalitas melalui antarmuka kustom prosedural. Mekanisme perpanjangan juga sangat memudahkan proses upgrade Horde3D dengan fungsi pihak ketiga tambahan.  

Tidak ada komentar:

Posting Komentar