Yocto/GL adalah kumpulan perpustakaan C++17 kecil untuk membangun algoritma grafis berbasis fisik yang dirilis di bawah lisensi MIT. Yocto/GL sengaja ditulis dengan gaya berorientasi data untuk kemudahan pengembangan dan penggunaan. Yocto/GL dipecah menjadi perpustakaan kecil untuk membuat navigasi kode lebih mudah. Lihat setiap file header untuk dokumentasi.
yocto/yocto_math.{h}
: vektor berukuran tetap, matriks, kerangka kaku, transformasiyocto/yocto_color.{h}
: konversi warna, penyesuaian warna, fungsi pemetaan nada, gradasi warna, peta warna, ruang warnayocto/yocto_geometry.{h}
: sinar, kotak pembatas, fungsi geometri, perpotongan sinar-primitif, tumpang tindih titik-primitifyocto/yocto_noise.{h}
: Kebisingan Perlinyocto/yocto_sampling.{h}
: pembuatan angka acak, pembuatan titik dan arah, utilitas Monte Carloyocto/yocto_shading.{h}
: evaluasi dan pengambilan sampel fungsi fresnel, lobus bsdf, lobus transmitansi, fungsi faseyocto/yocto_image.{h,cpp}
: tipe data gambar sederhana, pengubahan ukuran gambar, pemetaan warna, koreksi warna, gambar prosedural, prosedur langit matahariyocto/yocto_shape.{h,cpp}
: struktur data bentuk sederhana, utilitas untuk memanipulasi jerat segitiga, jerat segi empat dan kumpulan garis, penghitungan normal dan garis singgung, pembagian linier dan Catmull-Clark, pembuatan bentuk prosedural, perpotongan sinar, dan kueri titik terdekatyocto/yocto_scene.{h,cpp}
: representasi adegan dan evaluasi propertiyocto/yocto_bvh.{h,cpp}
: perpotongan sinar dan kueri titik terdekat dari jerat segitiga, jerat segi empat, kumpulan garis, dan adegan instans menggunakan hierarki volume pembatas dua tingkatyocto/yocto_trace.{h,cpp}
: penelusuran jalur permukaan dan rambut yang mendukung penerangan area dan lingkungan, mikrofaset GGX dan hamburan bawah permukaan, pengambilan sampel multi-kepentinganyocto/yocto_sceneio.{h,cpp}
: serialisasi gambar, bentuk dan adeganyocto/yocto_modelio.{h,cpp}
: penguraian dan penulisan tingkat rendah untuk format Ply, Obj, Stlyocto/yocto_pbrtio.{h,cpp}
: penguraian dan penulisan tingkat rendah untuk format Pbrtyocto/yocto_cli.{h}
: utilitas pencetakan dan penguraian baris perintahyocto/yocto_parallel.h
: utilitas konkurensi (tidak digunakan lagi)Anda dapat melihat Yocto/GL beraksi dalam aplikasi berikut yang ditulis untuk menguji perpustakaan:
apps/ytonemap.cpp
: konversi dan tampilan gambarapps/ycolorgrade.cpp
: penilaian warna gambarapps/yconvert.cpp
: konversi adeganapps/yconverts.cpp
: konversi bentukapps/ytrace.cpp
: rendering adegan offline dan interaktifapps/ycutrace.cpp
: rendering adegan offline dan interaktif dengan CUDAapps/yview.cpp
: tampilan adegan interaktifBerikut adalah beberapa gambar uji yang dirender dengan pelacak jalur. Lebih banyak gambar disertakan dalam situs proyek.
Yocto/GL mengikuti "model pemrograman berorientasi data" yang membuat data menjadi eksplisit. Data disimpan dalam struct sederhana dan diakses dengan fungsi gratis atau secara langsung. Semua data bersifat publik, jadi kami tidak melakukan upaya enkapsulasi. Kami melakukan ini karena ini membuat Yocto/GL lebih mudah diperluas dan dipelajari lebih cepat, dengan aliran data yang lebih eksplisit sehingga lebih mudah saat menulis kode paralel. Karena Yocto/GL terutama digunakan untuk penelitian dan pengajaran, data eksplisit lebih mudah diretas dan dipahami.
Hampir semua objek di Yocto/GL memiliki nilai semantik. Ini berarti semuanya dapat disalin dan diserialkan dengan mudah dan tidak memerlukan manajemen memori. Walaupun hal ini mempunyai kelemahan karena berpotensi menimbulkan salinan palsu, hal ini mempunyai keuntungan dalam memastikan bahwa tidak ada kerusakan memori yang dapat terjadi, yang ternyata merupakan masalah besar bagi pengguna C++ pemula, bahkan di perpustakaan yang sangat kecil seperti ini.
Dalam hal gaya kode kami lebih memilih pendekatan fungsional daripada pendekatan berorientasi objek, lebih memilih fungsi bebas daripada metode kelas. Semua fungsi dan data didefinisikan dalam namespace yocto
sehingga perpustakaan dapat saling memanggil dengan mudah.
Penggunaan templat di Yocto adalah alasan banyak pemfaktoran ulang, mulai dari tanpa templat hingga penggunaan templat yang berat. Saat ini, Yocto menggunakan beberapa template agar mudah dibaca. Di masa depan, kami akan meningkatkan penggunaan templat dalam kode matematika, sekaligus mempertahankan banyak API yang diketik secara eksplisit.
Untuk penanganan kesalahan di IO kami mengembalikan objek status atau antarmuka yang menggunakan flag boolean dan string kesalahan. Pengecualian internal digunakan ketika digunakan oleh perpustakaan eksternal, namun sebaliknya tidak ada pengecualian yang digunakan. Saat ini, pengecualian hanya digunakan untuk melaporkan "kesalahan pemrogram", yaitu ketika prasyarat atau kondisi pasca dilanggar dalam fungsi, seperti yang dilakukan oleh pustaka standar.
Perpustakaan ini dirilis di bawah lisensi MIT. Kami menyertakan berbagai dependensi eksternal dalam distribusi yang masing-masing memiliki lisensinya sendiri, sesuai dengan lisensi yang dipilih.
Pustaka ini memerlukan kompiler C++17 dan dapat dikompilasi di OsX (Xcode >= 11), Windows (MSVC >= 2019) dan Linux (gcc >= 9, clang >= 9).
Anda dapat membangun contoh aplikasi menggunakan CMake dengan mkdir build; cd build; cmake ..; cmake --build .
Dependensi yang diperlukan Yocto/GL disertakan dalam distribusi dan tidak perlu diinstal secara terpisah.
Yocto/GL secara opsional mendukung pembuatan demo OpenGL. Dukungan OpenGL diaktifkan dengan menentukan opsi cmake YOCTO_OPENGL
. Dependensi OpenGL disertakan dalam repo ini.
Yocto/GL secara opsional mendukung penggunaan Embree Intel untuk transmisi sinar. Lihat file CMake utama untuk mengetahui cara menautkannya. Dukungan Embree diaktifkan dengan menentukan opsi cmake YOCTO_EMBREE
. Embree perlu diinstal secara terpisah.
Yocto/GL secara opsional mendukung penggunaan Open Image Denoise Intel untuk denoising. Lihat file CMake utama untuk mengetahui cara menautkannya. Dukungan Open Image Denoise diaktifkan dengan menentukan opsi cmake YOCTO_DENOISE
. OIDN perlu diinstal secara terpisah.