google/filament

GitHub: google/filament

Filament 是一款跨平台轻量级实时物理渲染引擎,专注于为移动端和桌面端应用提供高性能的 3D 图形渲染能力。

Stars: 19789 | Forks: 2121

# Filament [![Android 构建状态](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/6694fb6729005928.svg)](https://github.com/google/filament/actions?query=workflow%3AAndroid) [![iOS 构建状态](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/0846478bbf005929.svg)](https://github.com/google/filament/actions?query=workflow%3AiOS) [![Linux 构建状态](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/59a59570e0005929.svg)](https://github.com/google/filament/actions?query=workflow%3ALinux) [![macOS 构建状态](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/0b9610cdf1005930.svg)](https://github.com/google/filament/actions?query=workflow%3AmacOS) [![Windows 构建状态](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/72f6478504005931.svg)](https://github.com/google/filament/actions?query=workflow%3AWindows) [![Web 构建状态](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/b4287be4c7005931.svg)](https://github.com/google/filament/actions?query=workflow%3AWeb) Filament 是一个适用于 Android、iOS、Linux、macOS、Windows 和 WebGL 的实时基于物理的渲染引擎。它的设计目标是在 Android 上尽可能小且尽可能高效。 ## 下载 [下载 Filament 版本](https://github.com/google/filament/releases) 以获取稳定构建。 Filament 发布归档包含生成资源所需的主机端工具。 请确保您始终使用与运行时库相同版本的工具。这对于 `matc`(材质编译器)尤为重要。 如果您希望自己构建 Filament,请参阅我们的[构建手册](/BUILDING.md)。 ### Android Android 项目只需将 Filament 库声明为 Maven 依赖项: ``` repositories { // ... mavenCentral() } dependencies { implementation 'com.google.android.filament:filament-android:1.69.5' } ``` 以下是 `com.google.android.filament` 组中可用的所有库: | 组件 | 描述 | | ------------- | ------------- | | [![filament-android](https://img.shields.io/maven-central/v/com.google.android.filament/filament-android?label=filament-android&color=green)](https://mvnrepository.com/artifact/com.google.android.filament/filament-android) | Filament 渲染引擎本身。 | | [![filament-android-debug](https://img.shields.io/maven-central/v/com.google.android.filament/filament-android-debug?label=filament-android-debug&color=green)](https://mvnrepository.com/artifact/com.google.android.filament/filament-android-debug) | `filament-android` 的调试版本。 | | [![gltfio-android](https://img.shields.io/maven-central/v/com.google.android.filament/gltfio-android?label=gltfio-android&color=green)](https://mvnrepository.com/artifact/com.google.android.filament/gltfio-android) | Filament 的 glTF 2.0 加载器,依赖于 `filament-android`。 | | [![filament-utils-android](https://img.shields.io/maven-central/v/com.google.android.filament/filament-utils-android?label=filament-utils-android&color=green)](https://mvnrepository.com/artifact/com.google.android.filament/filament-utils-android) | KTX 加载、Kotlin 数学和相机实用工具,依赖于 `gltfio-android`。 | | [![filamat-android](https://img.shields.io/maven-central/v/com.google.android.filament/filamat-android?label=filamat-android&color=green)](https://mvnrepository.com/artifact/com.google.android.filament/filamat-android) | 运行时材质构建器/编译器。该库体积较大,但包含完整的着色器编译器/验证器/优化器,并支持 OpenGL 和 Vulkan。 | ### iOS iOS 项目可以使用 CocoaPods 安装最新版本: ``` pod 'Filament', '~> 1.69.5' ``` ## 文档 - [Filament](https://google.github.io/filament/Filament.html),深入解释了实时基于物理的渲染、图形功能以及 Filament 的实现。本文档解释了我们大部分决策背后的数学原理和推理。对于图形程序员来说,这是了解 PBR 的良好入门读物。 - [材质](https://google.github.io/filament/Materials.html),我们材质系统的完整参考文档。本文档解释了我们不同的材质模型、如何使用材质编译器 `matc` 以及如何编写自定义材质。 - [材质属性](https://google.github.io/filament/notes/material_properties.html),标准材质模型的参考表。 ## 示例 ![夜间场景](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/598edd52bb005932.jpg) ![夜间场景](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/34beb2d553005934.jpg) ![材质](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/6fe2369d3b005935.jpg) ![材质](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/3ce6bc444d005937.jpg) ![头盔](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/09956acba6005938.jpg) ![屏幕空间折射](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/0e26b5746f005940.jpg) ## 特性 ### API - 适用于 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 - 适用于 Android、Linux、macOS 和 Windows 的 WebGPU - 适用于所有支持浏览器的 WebGL 2.0 ### 渲染 - Clustered 前向渲染器 - Cook-Torrance 微表面高光 BRDF - Lambertian 漫反射 BRDF - 自定义光照/表面着色 - HDR/线性光照 - 金属度工作流 - 清漆 - 各向异性光照 - 近似半透明(次表面)材质 - 布料/织物/光泽着色 - 法线贴图 & 环境光遮蔽贴图 - 基于图像的光照 - 基于物理的相机(快门速度、感光度和光圈) - 物理光单位 - 点光源、聚光灯和定向光 - 高光抗锯齿 - 点光源、聚光灯和定向光阴影 - 级联阴影 - EVSM, PCSS, DPCF, 或 PCF 阴影 - 透明阴影 - 接触阴影 - 屏幕空间环境光遮蔽 - 屏幕空间反射 - 屏幕空间折射 - 全局雾 - 动态分辨率(支持 AMD FidelityFX FSR) ### 后处理 - HDR 泛光 - 景深散景 - 多种色调映射器:PBR Neutral, AgX, 通用(可自定义), ACES, 电影感等。 - 颜色和色调管理:亮度缩放、色域映射 - 调色:曝光、夜间适应、白平衡、通道混合器、阴影/中间调/高光、ASC CDL、对比度、饱和度等。 - TAA, FXAA, MSAA - 屏幕空间镜头光晕 ### glTF 2.0 - 编码 - [x] 内嵌 - [x] 二进制 - 图元类型 - [x] 点 - [x] 线 - [ ] 线环 - [x] 线带 - [x] 三角形 - [x] 三角形带 - [ ] 三角形扇 - 动画 - [x] 变换动画 - [x] 线性插值 - [x] 变形动画 - [x] 稀疏访问器 - [x] 蒙皮动画 - [x] 关节动画 - 扩展 - [x] KHR_draco_mesh_compression - [x] KHR_lights_punctual - [x] KHR_materials_clearcoat - [x] KHR_materials_dispersion - [x] KHR_materials_emissive_strength - [x] KHR_materials_ior - [x] KHR_materials_pbrSpecularGlossiness - [x] KHR_materials_sheen - [x] KHR_materials_specular - [x] KHR_materials_transmission - [x] KHR_materials_unlit - [x] KHR_materials_variants - [x] KHR_materials_volume - [x] KHR_mesh_quantization - [x] KHR_texture_basisu - [x] KHR_texture_transform - [x] EXT_meshopt_compression ## 使用 Filament 渲染 ### 原生 Linux, macOS 和 Windows 您必须创建一个 `Engine`、一个 `Renderer` 和一个 `SwapChain`。`SwapChain` 是从原生窗口指针(例如 macOS 上的 `NSView` 或 Windows 上的 `HWND`)创建的: ``` Engine* engine = Engine::create(); SwapChain* swapChain = engine->createSwapChain(nativeWindow); Renderer* renderer = engine->createRenderer(); ``` 要渲染一帧,您必须接着创建一个 `View`、一个 `Scene` 和一个 `Camera`: ``` Camera* camera = engine->createCamera(EntityManager::get().create()); View* view = engine->createView(); Scene* scene = engine->createScene(); view->setCamera(camera); view->setScene(scene); ``` 可渲染对象被添加到场景中: ``` Entity renderable = EntityManager::get().create(); // build a quad RenderableManager::Builder(1) .boundingBox({{ -1, -1, -1 }, { 1, 1, 1 }}) .material(0, materialInstance) .geometry(0, RenderableManager::PrimitiveType::TRIANGLES, vertexBuffer, indexBuffer, 0, 6) .culling(false) .build(*engine, renderable); scene->addEntity(renderable); ``` 材质实例是从材质中获取的,而材质本身是从由 `matc` 生成的二进制 blob 加载的: ``` Material* material = Material::Builder() .package((void*) BAKED_MATERIAL_PACKAGE, sizeof(BAKED_MATERIAL_PACKAGE)) .build(*engine); MaterialInstance* materialInstance = material->createInstance(); ``` 要了解更多关于材质和 `matc` 的信息,请参阅[材质文档](https://google.github.io/filament/Materials.html)。 要进行渲染,只需将 `View` 传递给 `Renderer`: ``` // beginFrame() returns false if we need to skip a frame if (renderer->beginFrame(swapChain)) { // for each View renderer->render(view); renderer->endFrame(); } ``` 有关 Linux、macOS 和 Windows Filament 应用程序的完整示例,请查看 `samples/` 目录中的源文件。这些示例都基于 `libs/filamentapp/`,其中包含使用 SDL2 创建原生窗口并初始化 Filament 引擎、渲染器和视图的代码。 有关如何为基于图像的光照准备环境贴图的更多信息,请参阅 [BUILDING.md](/BUILDING.md#running-the-native-samples)。 ### Android 有关如何在 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 Filament 支持 iOS 11.0 及更高版本。有关在 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`](/BUILDING.md#running-the-native-samples) 或使用 `libiblprefilter` 库进行预处理。 ## 目录结构 该仓库不仅包含核心 Filament 引擎,还包含其支持库和工具。 - `android`: Android 库和项目 - `filamat-android`: 适用于 Android 的 Filament 材质生成库 (AAR) - `filament-android`: 适用于 Android 的 Filament 库 (AAR) - `filament-utils-android`: 额外实用工具(KTX 加载器、数学类型等) - `gltfio-android`: 适用于 Android 的 Filament glTF 加载库 (AAR) - `samples`: Android 特定的 Filament 示例 - `art`: 各种艺术作品的来源(Logo、PDF 手册等) - `assets`: 用于示例应用程序的 3D 资产 - `build`: CMake 构建脚本 - `docs`: 文档 - `math`: 用于探索 BRDF、方程等的 Mathematica 笔记本 - `filament`: 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](https://github.com/ocornut/imgui) 的帮助程序库 - `filamat`: 材质生成库 - `filamentapp`: 用于构建示例应用程序的 SDL2 骨架 - `filameshio`: 微型 filamesh 解析库(另请参阅 `tools/filamesh`) - `geometry`: 网格相关实用工具 - `gltfio`: glTF 2.0 加载器 - `ibl`: IBL 生成工具 - `image`: 图像过滤和简单变换 - `imageio`: 图像文件读取/写入,仅供内部使用 - `matdbg`: 用于在运行时检查着色器的 DebugServer(仅限调试构建) - `math`: 数学库 - `mathio`: 输出流的数学类型支持 - `utils`: 实用程序库(线程、内存、数据结构等) - `viewer`: glTF 查看器库(需要 gltfio) - `samples`: 桌面示例应用程序 - `shaders`: `filamat` 和 `matc` 使用的着色器 - `third_party`: 外部库和资产 - `environments`: CC0 许可下的环境贴图,可与 `cmgen` 一起使用 - `models`: 宽松许可下的模型 - `textures`: CC0 许可下的纹理 - `tools`: 主机工具 - `cmgen`: 基于图像的光照资产生成器 - `filamesh`: 网格转换器 - `glslminifier`: 缩小 GLSL 源代码 - `matc`: 材质编译器 - `matedit`: 编译材质的材质编辑器 - `matinfo` 显示有关使用 `matc` 编译的材质的信息 - `mipgen` 从源图像生成一系列 mip 级别 - `normal-blending`: 混合法线贴图的工具 - `resgen` 将二进制 blob 聚合为可嵌入的资源 - `roughness-prefilter`: 从法线贴图预过滤粗糙度贴图以减少锯齿 - `specular-color`: 根据光谱数据计算导体的镜面反射颜色 - `web`: JavaScript 绑定、文档和示例 ## 许可证 请参阅 [LICENSE](/LICENSE)。 ## 免责声明 这不是一个官方支持的 Google 产品。
标签:3D图形, Android, Bash脚本, C++, DSL, Google, iOS, JS文件枚举, Nuclei, OpenGL, PBR, Vulkan, WebGL, 图形引擎, 基于物理的渲染, 实时渲染, 实时渲染引擎, 数据可视化, 数据擦除, 材质系统, 渲染库, 游戏开发, 着色器, 移动开发, 计算机图形学