Filament adalah mesin rendering berbasis fisik real-time untuk Android, iOS, Linux, macOS, Windows, dan WebGL. Ini dirancang sekecil mungkin dan seefisien mungkin di Android.
Unduh rilis Filament untuk mengakses versi stabil. Arsip rilis filamen berisi alat sisi host yang diperlukan untuk menghasilkan aset.
Pastikan Anda selalu menggunakan alat dari rilis yang sama dengan perpustakaan runtime. Hal ini sangat penting untuk matc (penyusun materi).
Jika Anda lebih suka membuat Filamen sendiri, lihat panduan pembuatan kami.
Proyek Android cukup mendeklarasikan pustaka Filamen sebagai dependensi Maven:
repositori { // ...
pakarPusat()
}dependensi {
penerapan 'com.google.android.filament:filament-android:1.56.0'} Berikut semua perpustakaan yang tersedia di grup com.google.android.filament :
| Artefak | Keterangan |
|---|---|
| Mesin rendering Filamen itu sendiri. | |
Versi debug dari filament-android . | |
Pemuat glTF 2.0 untuk Filamen, bergantung pada filament-android . | |
Pemuatan KTX, matematika Kotlin, dan utilitas kamera, bergantung pada gltfio-android . | |
| Pembuat/kompiler material runtime. Pustaka ini besar tetapi berisi kompiler/validator/pengoptimal shader lengkap dan mendukung OpenGL dan Vulkan. | |
Alternatif yang jauh lebih kecil untuk filamat-android yang hanya dapat menghasilkan shader OpenGL. Itu tidak memberikan validasi atau optimasi. |
Proyek iOS dapat menggunakan CocoaPods untuk menginstal rilis terbaru:
pod 'Filamen', '~> 1.56.0'
Filament, penjelasan mendalam tentang rendering berbasis fisik real-time, kemampuan grafis, dan implementasi Filament. Dokumen ini menjelaskan perhitungan dan alasan di balik sebagian besar keputusan kami. Dokumen ini adalah pengenalan yang baik tentang PBR untuk pemrogram grafis.
Material, dokumentasi referensi lengkap untuk sistem material kami. Dokumen ini menjelaskan berbagai model material kami, cara menggunakan kompiler material matc , dan cara menulis material khusus.
Material Properties, lembar referensi untuk model material standar.






API C++ asli untuk Android, iOS, Linux, macOS, dan Windows
API Java/JNI untuk Android
API JavaScript
OpenGL 4.1+ untuk Linux, macOS dan Windows
OpenGL ES 3.0+ untuk Android dan iOS
Logam untuk macOS dan iOS
Vulkan 1.0 untuk Android, Linux, macOS, dan Windows
WebGL 2.0 untuk semua platform
Penyaji maju yang terkelompok
BRDF khusus mikrofaset Cook-Torrance
BRDF difus Lambertian
Pencahayaan khusus/naungan permukaan
Pencahayaan HDR/linier
Alur kerja metalik
Mantel bening
Pencahayaan anisotropik
Perkiraan bahan tembus cahaya (di bawah permukaan).
Naungan kain/kain/kilap
Pemetaan normal & pemetaan oklusi ambien
Pencahayaan berbasis gambar
Kamera berbasis fisik (kecepatan rana, sensitivitas, dan bukaan)
Unit cahaya fisik
Lampu titik, lampu sorot, dan lampu arah
Anti-aliasing khusus
Bayangan cahaya titik, titik, dan terarah
Bayangan mengalir
Bayangan EVSM, PCSS, DPCF, atau PCF
Bayangan transparan
Hubungi bayangan
Oklusi ambien ruang layar
Refleksi ruang layar
Pembiasan ruang layar
Kabut global
Resolusi dinamis (dengan dukungan untuk AMD FidelityFX FSR)
HDR berkembang
Kedalaman bokeh bidang
Beberapa pembuat peta nada: generik (dapat disesuaikan), ACES, filmik, dll.
Manajemen warna dan nada: penskalaan pencahayaan, pemetaan gamut
Penilaian warna: pencahayaan, adaptasi malam, keseimbangan putih, pencampur saluran, bayangan/nada tengah/sorotan, ASC CDL, kontras, saturasi, dll.
TAA, FXAA, MSAA
Lensa ruang layar menyala
Pengkodean
Tertanam
Biner
Tipe Primitif
Poin
Garis
Lingkaran Garis
Jalur Garis
Segitiga
Jalur Segitiga
Penggemar Segitiga
Animasi
Aksesor yang jarang
Transformasi animasi
Interpolasi linier
Animasi morf
Animasi kulit
Animasi bersama
Ekstensi
KHR_draco_mesh_compression
KHR_lights_punctual
KHR_materials_clearcoat
KHR_bahan_kekuatan_emisif
KHR_bahan_ior
KHR_materials_pbrKekilauan Spekuler
KHR_bahan_kemilau
KHR_bahan_transmisi
KHR_bahan_tidak menyala
KHR_materials_variants
KHR_bahan_volume
KHR_materials_specular
KHR_mesh_quantization
KHR_texture_basisu
KHR_texture_transform
EXT_meshopt_compression
Anda harus membuat Engine , Renderer dan SwapChain . SwapChain dibuat dari penunjuk jendela asli (misalnya NSView di macOS atau HWND di Windows):
Mesin* mesin = Mesin::buat(); SwapChain* swapChain = mesin->createSwapChain(nativeWindow); Renderer* renderer = mesin->createRenderer();
Untuk merender bingkai, Anda harus membuat View , Scene , dan Camera :
Kamera* kamera = mesin->createCamera(EntityManager::get().create()); Lihat* lihat = mesin->createView(); Adegan* adegan = mesin->createScene(); lihat->setCamera(kamera); lihat->setScene(adegan);
Renderable ditambahkan ke scene:
Entitas yang dapat dirender = EntityManager::get().create();// membuat quadRenderableManager::Builder(1)
.boundingBox({{ -1, -1, -1 }, { 1, 1, 1 }})
.material(0, contoh material)
.geometry(0, RenderableManager::PrimitiveType::TRIANGLES, vertexBuffer, indexBuffer, 0, 6)
.pemusnahan(salah)
.build(*mesin, dapat dirender);
adegan->addEntity(dapat dirender); Contoh material diperoleh dari suatu material, yang dimuat dari gumpalan biner yang dihasilkan oleh matc :
Bahan* bahan = Bahan::Pembangun()
.paket((batal*) BAKED_MATERIAL_PACKAGE, ukuran(BAKED_MATERIAL_PACKAGE))
.build(*mesin);
MaterialInstance* materialInstance = material->createInstance(); Untuk mempelajari lebih lanjut tentang materi dan matc , silakan lihat dokumentasi materi.
Untuk merender, cukup berikan View ke Renderer :
//beginFrame() mengembalikan nilai false jika kita perlu melewati frameif (renderer->beginFrame(swapChain)) { // untuk setiap Tampilan
penyaji->render(tampilan);
penyaji->endFrame();
} Untuk contoh lengkap aplikasi Linux, macOS dan Windows Filament, lihat file sumber di direktori samples/ . Semua sampel ini didasarkan pada libs/filamentapp/ yang berisi kode yang membuat jendela asli dengan SDL2 dan menginisialisasi mesin Filamen, penyaji, dan tampilan.
Untuk informasi lebih lanjut tentang cara menyiapkan peta lingkungan untuk pencahayaan berbasis gambar, silakan merujuk ke BUILDING.md.
Lihat android/samples untuk contoh cara menggunakan Filament di Android.
Anda harus selalu menginisialisasi Filament terlebih dahulu dengan memanggil Filament.init() .
Rendering dengan Filament di Android mirip dengan rendering dari kode asli (API sebagian besar sama di berbagai bahasa). Anda dapat merender ke dalam Surface dengan meneruskan Surface ke metode createSwapChain . Hal ini memungkinkan Anda untuk merender ke SurfaceTexture , TextureView atau SurfaceView . Untuk mempermudah kami menyediakan API khusus Android bernama UiHelper dalam paket com.google.android.filament.android . Yang perlu Anda lakukan hanyalah menyetel callback render pada helper dan melampirkan SurfaceView atau TextureView Anda ke dalamnya. Anda masih bertanggung jawab untuk membuat rantai swap di callback onNativeWindowChanged() .
Filamen didukung di iOS 11.0 dan yang lebih baru. Lihat ios/samples untuk contoh penggunaan Filament di iOS.
Filamen di iOS sebagian besar sama dengan rendering asli dengan C++. CAEAGLLayer atau CAMetalLayer diteruskan ke metode createSwapChain . Filament untuk iOS mendukung Metal (lebih disukai) dan OpenGL ES.
Untuk memulai, Anda dapat menggunakan peta tekstur dan lingkungan yang ditemukan masing-masing di third_party/textures dan third_party/environments . Aset ini berada di bawah lisensi CC0. Silakan merujuk ke file URL.txt masing-masing untuk mengetahui lebih banyak tentang penulis aslinya.
Lingkungan harus diproses terlebih dahulu menggunakan cmgen atau menggunakan pustaka libiblprefilter .
Silakan baca dan ikuti langkah-langkah di CONTRIBUTING.md. Pastikan Anda memahami gaya kodenya.
Repositori ini tidak hanya berisi mesin inti Filament, tetapi juga perpustakaan dan alat pendukungnya.
android : perpustakaan dan proyek Android
filamat-android : Pustaka pembuatan bahan filamen (AAR) untuk Android
filament-android : Perpustakaan filamen (AAR) untuk Android
filament-utils-android : Utilitas tambahan (pemuat KTX, tipe matematika, dll.)
gltfio-android : Pustaka pemuatan glTF filamen (AAR) untuk Android
samples : sampel Filamen khusus Android
art : Sumber untuk berbagai karya seni (logo, manual PDF, dll.)
assets : aset 3D untuk digunakan dengan aplikasi sampel
build : CMembuat skrip build
docs : Dokumentasi
math : Buku catatan Mathematica digunakan untuk mengeksplorasi BRDF, persamaan, dll.
filament : Mesin rendering filamen (ketergantungan minimal)
backend : Merender backend/driver (Vulkan, Metal, OpenGL/ES)
ide : File konfigurasi untuk IDE (CLion, dll.)
ios : Contoh proyek untuk iOS
libs : Perpustakaan
bluegl : Pengikatan OpenGL untuk macOS, Linux dan Windows
bluevk : Pengikatan Vulkan untuk macOS, Linux, Windows dan Android
camutils : Utilitas manipulasi kamera
filabridge : Perpustakaan yang dibagikan oleh mesin Filament dan alat host
filaflat : Pustaka serialisasi/deserialisasi yang digunakan untuk materi
filagui : Perpustakaan pembantu untuk ImGui yang terhormat
filamat : Perpustakaan pembuatan materi
filamentapp : kerangka SDL2 untuk membuat aplikasi sampel
filameshio : Pustaka penguraian filamesh kecil (lihat juga tools/filamesh )
geometry : Utilitas terkait mesh
gltfio : Pemuat untuk glTF 2.0
ibl : Alat pembangkitan IBL
image : Pemfilteran gambar dan transformasi sederhana
imageio : Membaca/menulis file gambar, hanya ditujukan untuk penggunaan internal
matdbg : DebugServer untuk memeriksa shader saat run-time (khusus debug build)
math : perpustakaan matematika
mathio : Dukungan tipe matematika untuk aliran keluaran
utils : Pustaka utilitas (utas, memori, struktur data, dll.)
viewer : perpustakaan penampil glTF (membutuhkan gltfio)
samples : Contoh aplikasi desktop
shaders : Shader yang digunakan oleh filamat dan matc
third_party : Pustaka dan aset eksternal
environments : Peta lingkungan di bawah lisensi CC0 yang dapat digunakan dengan cmgen
models : Model di bawah lisensi permisif
textures : Tekstur di bawah lisensi CC0
tools : Alat host
cmgen : Generator aset pencahayaan berbasis gambar
filamesh : Konverter jala
glslminifier : Memperkecil kode sumber GLSL
matc : Penyusun materi
matinfo Menampilkan informasi tentang materi yang disusun dengan matc
mipgen Menghasilkan serangkaian miplevel dari gambar sumber
normal-blending : Alat untuk memadukan peta normal
resgen Mengagregasi gumpalan biner menjadi sumber daya yang dapat disematkan
roughness-prefilter : Memfilter terlebih dahulu peta kekasaran dari peta normal untuk mengurangi aliasing
specular-color : Menghitung warna specular konduktor berdasarkan data spektral
web : pengikatan JavaScript, dokumentasi, dan sampel
Silakan lihat LISENSI.
Ini bukan produk Google yang didukung secara resmi.