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.