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 レンダリング エンジン自体。 | |
filament-android のデバッグ バージョン。 | |
Filament 用の glTF 2.0 ローダーは、 filament-android に依存します。 | |
KTX の読み込み、Kotlin 計算、およびカメラ ユーティリティはgltfio-android に依存します。 | |
ランタイム マテリアル ビルダー/コンパイラー。このライブラリは大きいですが、完全なシェーダ コンパイラ/検証/オプティマイザが含まれており、OpenGL と Vulkan の両方をサポートしています。 | |
OpenGL シェーダのみを生成できるfilamat-android のはるかに小さい代替品。検証や最適化は提供されません。 |
iOS プロジェクトは、CocoaPods を使用して最新リリースをインストールできます。
ポッド 'フィラメント'、'~> 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 用のメタル
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_compression
KHR_ライト_時間厳守
KHR_素材_クリアコート
KHR_materials_emissive_strength
KHR_materials_ior
KHR_materials_pbr鏡面光沢度
KHR_素材_光沢
KHR_素材_伝送
KHR_マテリアル_消灯
KHR_materials_variants
KHR_材料_体積
KHR_materials_specular
KHR_メッシュ量子化
KHR_texture_basis
KHR_texture_transform
EXT_meshopt_compression
Engine
、 Renderer
、およびSwapChain
作成する必要があります。 SwapChain
、ネイティブ ウィンドウ ポインター (たとえば、macOS のNSView
または Windows のHWND
) から作成されます。
エンジン* エンジン = Engine::create(); SwapChain* swapChain = Engine->createSwapChain(nativeWindow); Renderer* レンダラー = Engine->createRenderer();
フレームをレンダリングするには、次にView
、 Scene
、およびCamera
作成する必要があります。
Camera* カメラ = Engine->createCamera(EntityManager::get().create()); ビュー* ビュー = エンジン->createView(); シーン* シーン = エンジン->createScene(); view->setCamera(カメラ); view->setScene(シーン);
レンダリング可能ファイルがシーンに追加されます。
Entity renderable = EntityManager::get().create();//quadRenderableManager::Builder(1) をビルドします .boundingBox({{ -1, -1, -1 }, { 1, 1, 1 }}) .material(0, マテリアルインスタンス) .geometry(0, RenderableManager::PrimitiveType::TRIANGLES, 頂点バッファ, インデックスバッファ, 0, 6) .カリング(偽) .build(*エンジン、レンダリング可能); scene->addEntity(レンダリング可能);
マテリアル インスタンスはマテリアルから取得され、マテリアル自体はmatc
によって生成されたバイナリ BLOB からロードされます。
マテリアル* マテリアル = マテリアル::ビルダー() .package((void*) BAKED_MATERIAL_PACKAGE, sizeof(BAKED_MATERIAL_PACKAGE)) .build(*エンジン); マテリアルインスタンス* マテリアルインスタンス = マテリアル->createInstance();
マテリアルとmatc
詳細については、マテリアルのドキュメントを参照してください。
レンダリングするには、単にView
Renderer
に渡すだけです。
// フレームをスキップする必要がある場合、beginFrame() は false を返しますif (renderer->beginFrame(swapChain)) { // ビューごとに レンダラ->レンダリング(ビュー); レンダラー->endFrame(); }
Linux、macOS、および Windows Filament アプリケーションの完全な例については、 samples/
ディレクトリ内のソース ファイルを参照してください。これらのサンプルはすべて、SDL2 でネイティブ ウィンドウを作成し、Filament エンジン、レンダラー、ビューを初期化するコードを含むlibs/filamentapp/
に基づいています。
イメージベースのライティング用の環境マップを準備する方法の詳細については、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 以降でサポートされています。 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
: フィラメント エンジンとホスト ツールによって共有されるライブラリ
filaflat
: マテリアルに使用されるシリアル化/逆シリアル化ライブラリ
filagui
: Dear 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
: cmgen
で使用できる CC0 ライセンスに基づく環境マップ
models
: 寛容なライセンスに基づくモデル
textures
: CC0 ライセンスに基づくテクスチャ
tools
: ホストツール
cmgen
: 画像ベースの照明アセット ジェネレーター
filamesh
: メッシュコンバーター
glslminifier
: GLSL ソース コードを縮小します。
matc
: マテリアルコンパイラ
matinfo
matc
でコンパイルされたマテリアルに関する情報を表示します
mipgen
ソース イメージから一連のミップレベルを生成します
normal-blending
: 法線マップをブレンドするツール
resgen
バイナリ BLOB を埋め込み可能なリソースに集約します
roughness-prefilter
: エイリアシングを軽減するために法線マップから粗さマップを事前にフィルタリングします。
specular-color
: スペクトル データに基づいて導体の鏡面カラーを計算します。
web
: JavaScript バインディング、ドキュメント、サンプル
ライセンスを参照してください。
これは正式にサポートされている Google 製品ではありません。