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 官方支援的產品。