Filament 是一個基於實體的即時渲染引擎,適用於 Android、iOS、Linux、macOS、Windows 和 WebGL。它被設計為在 Android 上盡可能小、盡可能高效。
下載 Filament 版本以存取穩定版本。燈絲發布檔案包含產生資產所需的主機端工具。
確保始終使用與運行時庫相同版本的工具。這對於matc (材質編譯器)尤其重要。
如果您想自行建立 Filament,請參閱我們的建造手冊。
Android 專案可以簡單地將 Filament 函式庫宣告為 Maven 相依性:
儲存庫 { // ...
mavenCentral()
}相依性{
實作 'com.google.android.filament:filament-android:1.56.0'}以下是com.google.android.filament群組中可用的所有函式庫:
| 人工製品 | 描述 |
|---|---|
| 燈絲渲染引擎本身。 | |
filament-android的調試版本。 | |
用於 Filament 的 glTF 2.0 載入器依賴filament-android 。 | |
KTX 載入、Kotlin 數學和相機實用程式取決於gltfio-android 。 | |
| 運行時材質建構器/編譯器。該庫很大,但包含完整的著色器編譯器/驗證器/優化器,並支援 OpenGL 和 Vulkan。 | |
一個比filamat-android更小的替代品,只能產生 OpenGL 著色器。它不提供驗證或優化。 |
iOS 專案可以使用 CocoaPods 安裝最新版本:
pod '燈絲', '~> 1.56.0'
Filament,深入解釋基於物理的即時渲染、Filament 的圖形功能和實作。本文檔解釋了我們大多數決策背後的數學和推理。本文檔是對圖形程式設計師的 PBR 很好的介紹。
材料,我們材料系統的完整參考文件。本文檔解釋了我們不同的材質模型、如何使用材質編譯器matc以及如何編寫自訂材質。
材料屬性,標準材料模型的參考表。






適用於 Android、iOS、Linux、macOS 和 Windows 的本機 C++ API
適用於 Android 的 Java/JNI API
JavaScript API
適用於 Linux、macOS 和 Windows 的 OpenGL 4.1+
適用於 Android 和 iOS 的 OpenGL ES 3.0+
適用於 macOS 和 iOS 的 Metal
適用於 Android、Linux、macOS 和 Windows 的 Vulkan 1.0
適用於所有平台的 WebGL 2.0
叢集前向渲染器
Cook-Torrance 微面鏡面 BRDF
朗伯漫反射 BRDF
自訂照明/表面著色
HDR/線性照明
金屬工作流程
透明塗層
各向異性照明
近似半透明(次表面)材質
布料/織物/光澤著色
法線貼圖與環境光遮擋貼圖
基於影像的照明
以實體為基礎的相機(快門速度、靈敏度和光圈)
物理光單位
點光源、聚光燈和定向光
鏡面反鋸齒
點、聚光和定向光陰影
層疊陰影
EVSM、PCSS、DPCF 或 PCF 陰影
透明陰影
接觸陰影
螢幕空間環境光遮擋
螢幕空間反射
螢幕空間折射
全球霧
動態解析度(支援 AMD FidelityFX FSR)
HDR 綻放
景深散景
多種色調映射器:通用(可自訂)、ACES、影片等。
色彩和色調管理:亮度縮放、色域映射
色彩分級:曝光、夜間適應、白平衡、通道混合器、陰影/中間色調/高光、ASC CDL、對比、飽和度等。
TAA、FXAA、MSAA
螢幕空間鏡頭光暈
編碼
嵌入式
二進位
原始型
積分
線路
線路循環
線帶
三角形
三角帶
三角扇
卡通
稀疏存取器
變換動畫
線性插補
變形動畫
皮膚動畫
聯合動畫
擴充
KHR_draco_mesh_壓縮
KHR_lights_punctual
KHR_材質_透明塗層
KHR_materials_emissive_strength
KHR_材質_ior
KHR_materials_pbr鏡面光澤度
KHR_材料_光澤
KHR_材料_傳輸
KHR_materials_unlit
KHR_materials_variants
KHR_材料_體積
KHR_材質_鏡面反射
KHR_mesh_量化
KHR_texture_basisu
KHR_紋理_變換
EXT_meshopt_壓縮
您必須創建一個Engine 、一個Renderer和一個SwapChain 。 SwapChain是從本機視窗指標(例如 macOS 上的NSView或 Windows 上的HWND )建立的:
引擎*引擎=引擎::create(); SwapChain* swapChain = 引擎->createSwapChain(nativeWindow); 渲染器*渲染器=引擎->createRenderer();
要渲染幀,您必須建立一個View 、一個Scene和一個Camera :
相機* 相機 = 引擎->createCamera(EntityManager::get().create()); View* view = engine->createView(); 場景*場景=引擎->createScene(); 視圖->setCamera(相機); 視圖->setScene(場景);
可渲染物件被加入到場景中:
Entity renderable = EntityManager::get().create();//建構一個quadRenderableManager::Builder(1)
.boundingBox({{ -1, -1, -1 }, { 1, 1, 1 }})
.material(0, 材質實例)
.geometry(0, RenderableManager::PrimitiveType::TRIANGLES, vertexBuffer, indexBuffer, 0, 6)
.剔除(假)
.build(*引擎,可渲染);
場景->addEntity(可渲染);材質實例是從材質中取得的,材質本身是從matc產生的二進位 blob 載入的:
材質*材質=材質::Builder()
.package((void*) BAKED_MATERIAL_PACKAGE, sizeof(BAKED_MATERIAL_PACKAGE))
.build(*引擎);
MaterialInstance*materialInstance = 材質->createInstance();要了解有關材料和matc更多信息,請參閱材料文件。
要渲染,只需將View傳遞給Renderer :
// 如果我們需要跳過一幀,則 beginFrame() 傳回 false if (renderer->beginFrame(swapChain)) { // 對於每個 View
渲染器->渲染(視圖);
渲染器->endFrame();
}有關 Linux、macOS 和 Windows Filament 應用程式的完整範例,請查看samples/目錄中的來源檔案。這些範例皆基於libs/filamentapp/其中包含使用 SDL2 建立本機視窗並初始化 Filament 引擎、渲染器和視圖的程式碼。
有關如何為基於影像的照明準備環境貼圖的更多信息,請參閱 BUILDING.md。
有關如何在 Android 上使用 Filament 的範例,請參閱android/samples 。
您必須始終先透過呼叫Filament.init()來初始化 Filament。
在 Android 上使用 Filament 進行渲染與從本機程式碼進行渲染類似(跨語言的 API 基本上相同)。您可以透過將Surface傳遞給createSwapChain方法來渲染到Surface 。這允許您渲染到SurfaceTexture 、 TextureView或SurfaceView 。為了讓事情變得更容易,我們在com.google.android.filament.android套件中提供了一個名為UiHelper的 Android 特定 API。您需要做的就是在助手上設定渲染回呼並將SurfaceView或TextureView附加到它。您仍然負責在onNativeWindowChanged()回呼中建立交換鏈。
iOS 11.0 及更高版本支援 Filament。有關在 iOS 上使用 Filament 的範例,請參閱ios/samples 。
iOS 上的 Filament 與使用 C++ 進行的本機渲染基本上相同。 CAEAGLLayer或CAMetalLayer被傳遞給createSwapChain方法。 iOS 版 Filament 支援 Metal(首選)和 OpenGL ES。
首先,您可以使用分別在third_party/textures和third_party/environments中找到的紋理和環境貼圖。這些資產已獲得 CC0 許可。請參閱各自的URL.txt檔案以了解有關原作者的更多資訊。
必須使用cmgen或libiblprefilter庫對環境進行預處理。
請閱讀並遵循 CONTRIBUTING.md 中的步驟。確保您熟悉程式碼風格。
此儲存庫不僅包含核心 Filament 引擎,還包含其支援庫和工具。
android :Android 庫和項目
filamat-android :適用於 Android 的燈絲材料生成庫(AAR)
filament-android :適用於 Android 的燈絲庫 (AAR)
filament-utils-android :額外的實用程式(KTX 載入器、數學類型等)
gltfio-android :適用於 Android 的燈絲 glTF 載入庫(AAR)
samples :Android 特定的 Filament 範例
art :各種藝術品的來源(標誌、PDF 手冊等)
assets :與範例應用程式一起使用的 3D 資源
build : CMake 建置腳本
docs :文檔
math :用於探索 BRDF、方程式等的 Mathematica 筆記本。
filament :燈絲渲染引擎(最小依賴性)
backend :渲染後端/驅動程式(Vulkan、Metal、OpenGL/ES)
ide :IDE 的設定檔(CLion 等)
ios :iOS 範例項目
libs :庫
bluegl :適用於 macOS、Linux 和 Windows 的 OpenGL 綁定
bluevk :適用於 macOS、Linux、Windows 和 Android 的 Vulkan 綁定
camutils :相機操作實用程式
filabridge :由 Filament 引擎和主機工具共用的函式庫
filaflat :用於材料的序列化/反序列化庫
filagui :Dear ImGui 的幫助程式庫
filamat :材質生成庫
filamentapp :用於建立範例應用程式的 SDL2 框架
filameshio :小型 filamesh 解析庫(另請參閱tools/filamesh )
geometry :網格相關的實用程序
gltfio :glTF 2.0 的載入器
ibl :IBL 生成工具
image :影像過濾和簡單變換
imageio :圖像檔案讀取/寫,僅供內部使用
matdbg :用於在運行時檢查著色器的調試伺服器(僅調試版本)
math :數學庫
mathio :輸出流的數學類型支持
utils :實用程式庫(執行緒、記憶體、資料結構等)
viewer :glTF 檢視器庫(需要 gltfio)
samples :範例桌面應用程式
shaders : filamat和matc使用的著色器
third_party :外部函式庫和資產
environments :CC0 許可下的環境圖,可與cmgen一起使用
models : 許可許可下的模型
textures :CC0 授權下的紋理
tools :主機工具
cmgen :基於影像的照明資源產生器
filamesh : 網格轉換器
glslminifier :縮小 GLSL 原始碼
matc :材質編譯器
matinfo顯示有關使用matc編譯的材料的信息
mipgen從來源影像產生一系列 miplevel
normal-blending :混合法線貼圖的工具
resgen將二進位 blob 聚合為可嵌入資源
roughness-prefilter :從法線貼圖中預過濾粗糙度貼圖以減少鋸齒
specular-color :根據光譜資料計算導體的鏡面顏色
web :JavaScript 綁定、文件和範例
請參閱許可證。
這不是 Google 官方支援的產品。