Filament ist eine physikalisch basierte Echtzeit-Rendering-Engine für Android, iOS, Linux, macOS, Windows und WebGL. Es ist so konzipiert, dass es auf Android so klein wie möglich und so effizient wie möglich ist.
Laden Sie Filament-Versionen herunter, um auf stabile Builds zuzugreifen. Filament-Release-Archive enthalten hostseitige Tools, die zum Generieren von Assets erforderlich sind.
Stellen Sie sicher, dass Sie immer Tools aus demselben Release wie die Laufzeitbibliothek verwenden. Dies ist besonders wichtig für matc
(Material Compiler).
Wenn Sie Filament lieber selbst bauen möchten, lesen Sie bitte unsere Bauanleitung.
Android-Projekte können Filament-Bibliotheken einfach als Maven-Abhängigkeiten deklarieren:
Repositories { // ... mavenCentral() }Abhängigkeiten { Implementierung 'com.google.android.filament:filament-android:1.56.0'}
Hier sind alle in der Gruppe com.google.android.filament
verfügbaren Bibliotheken:
Artefakt | Beschreibung |
---|---|
Die Filament-Rendering-Engine selbst. | |
Debug-Version von filament-android . | |
Ein glTF 2.0-Loader für Filament hängt von filament-android ab. | |
Das Laden von KTX, Kotlin-Mathematik und Kamera-Dienstprogramme hängen von gltfio-android ab. | |
Ein Laufzeitmaterial-Builder/Compiler. Diese Bibliothek ist umfangreich, enthält jedoch einen vollständigen Shader-Compiler/Validator/Optimierer und unterstützt sowohl OpenGL als auch Vulkan. | |
Eine viel kleinere Alternative zu filamat-android , die nur OpenGL-Shader generieren kann. Es bietet keine Validierung oder Optimierungen. |
iOS-Projekte können CocoaPods verwenden, um die neueste Version zu installieren:
Pod 'Filament', '~> 1.56.0'
Filament, eine ausführliche Erläuterung des physikalisch basierten Echtzeit-Renderings, der Grafikfunktionen und der Implementierung von Filament. In diesem Dokument werden die Mathematik und die Überlegungen erläutert, die den meisten unserer Entscheidungen zugrunde liegen. Dieses Dokument ist eine gute Einführung in PBR für Grafikprogrammierer.
Materialien, die vollständige Referenzdokumentation für unser Materialsystem. In diesem Dokument werden unsere verschiedenen Materialmodelle, die Verwendung des Material-Compilers matc
und das Schreiben benutzerdefinierter Materialien erläutert.
Materialeigenschaften, ein Referenzblatt für das Standardmaterialmodell.
Native C++-API für Android, iOS, Linux, macOS und Windows
Java/JNI-API für Android
JavaScript-API
OpenGL 4.1+ für Linux, macOS und Windows
OpenGL ES 3.0+ für Android und iOS
Metal für macOS und iOS
Vulkan 1.0 für Android, Linux, macOS und Windows
WebGL 2.0 für alle Plattformen
Geclusterter Vorwärtsrenderer
Cook-Torrance-Mikrofacettenspiegel BRDF
Lambertsches diffuses BRDF
Individuelle Beleuchtung/Flächenbeschattung
HDR/lineare Beleuchtung
Metallischer Arbeitsablauf
Klarlack
Anisotrope Beleuchtung
Annähernd durchscheinende (unter der Oberfläche liegende) Materialien
Stoff/Stoff/Glanzschattierung
Normales Mapping und Ambient Occlusion Mapping
Bildbasierte Beleuchtung
Physikalisch basierte Kamera (Verschlusszeit, Empfindlichkeit und Blende)
Physikalische Lichteinheiten
Punktlichter, Punktlichter und gerichtetes Licht
Spiegelndes Anti-Aliasing
Punkt-, Punkt- und gerichtete Lichtschatten
Kaskadierte Schatten
EVSM-, PCSS-, DPCF- oder PCF-Schatten
Transparente Schatten
Kontaktschatten
Umgebungsokklusion im Bildschirmbereich
Reflexionen im Bildschirmraum
Brechung im Bildschirmraum
Globaler Nebel
Dynamische Auflösung (mit Unterstützung für AMD FidelityFX FSR)
HDR-Blüte
Tiefenschärfe-Bokeh
Mehrere Tone Mapper: generisch (anpassbar), ACES, filmisch usw.
Farb- und Tonmanagement: Luminanzskalierung, Gamut-Mapping
Farbkorrektur: Belichtung, Nachtanpassung, Weißabgleich, Kanalmischer, Schatten/Mitteltöne/Lichter, ASC CDL, Kontrast, Sättigung usw.
TAA, FXAA, MSAA
Blendenflecke im Bildschirmraum
Kodierungen
Eingebettet
Binär
Primitive Typen
Punkte
Linien
Linienschleife
Linienstreifen
Dreiecke
Dreiecksstreifen
Dreieckfächer
Animation
Sparse-Accessor
Animation verwandeln
Lineare Interpolation
Morph-Animation
Hautanimation
Gemeinsame Animation
Erweiterungen
KHR_draco_mesh_compression
KHR_lights_punctual
KHR_materials_clearcoat
KHR_materials_emissive_strength
KHR_materials_ior
KHR_materials_pbrSpecularGlossiness
KHR_materials_sheen
KHR_materials_transmission
KHR_materials_unlit
KHR_materials_variants
KHR_materials_volume
KHR_materials_specular
KHR_mesh_quantization
KHR_texture_basisu
KHR_texture_transform
EXT_meshopt_compression
Sie müssen eine Engine
, einen Renderer
und eine SwapChain
erstellen. Die SwapChain
wird aus einem nativen Fensterzeiger erstellt (z. B. einem NSView
unter macOS oder einem HWND
unter Windows):
Engine* engine = Engine::create(); SwapChain* swapChain = engine->createSwapChain(nativeWindow); Renderer* renderer = engine->createRenderer();
Um einen Frame zu rendern, müssen Sie dann eine View
, eine Scene
und eine Camera
erstellen:
Kamera* camera = engine->createCamera(EntityManager::get().create()); View* view = engine->createView(); Scene* scene = engine->createScene(); view->setCamera(camera); view->setScene(scene);
Der Szene werden Renderables hinzugefügt:
Entity renderable = EntityManager::get().create();// einen quadRenderableManager::Builder(1) erstellen .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);
Die Materialinstanz wird aus einem Material abgerufen, das selbst aus einem von matc
generierten binären Blob geladen wird:
Material* material = Material::Builder() .package((void*) BAKED_MATERIAL_PACKAGE, sizeof(BAKED_MATERIAL_PACKAGE)) .build(*engine); MaterialInstance* materialInstance = material->createInstance();
Weitere Informationen zu Materialien und matc
finden Sie in der Materialdokumentation.
Zum Rendern übergeben Sie einfach die View
an den Renderer
:
// beginFrame() gibt false zurück, wenn wir einen Frame überspringen müssenif (renderer->beginFrame(swapChain)) { // für jede Ansicht renderer->render(view); renderer->endFrame(); }
Vollständige Beispiele für Linux-, macOS- und Windows-Filament-Anwendungen finden Sie in den Quelldateien im Verzeichnis samples/
. Diese Beispiele basieren alle auf libs/filamentapp/
, das den Code enthält, der ein natives Fenster mit SDL2 erstellt und die Filament-Engine, den Renderer und die Ansichten initialisiert.
Weitere Informationen zum Vorbereiten von Umgebungskarten für bildbasierte Beleuchtung finden Sie unter BUILDING.md.
Beispiele für die Verwendung von Filament auf Android finden Sie unter android/samples
.
Sie müssen Filament immer zuerst initialisieren, indem Sie Filament.init()
aufrufen.
Das Rendern mit Filament auf Android ähnelt dem Rendern aus nativem Code (die APIs sind in allen Sprachen weitgehend gleich). Sie können eine Surface
rendern, indem Sie eine Surface
an die Methode createSwapChain
übergeben. Dies ermöglicht Ihnen das Rendern in eine SurfaceTexture
, eine TextureView
oder eine SurfaceView
. Zur Vereinfachung stellen wir eine Android-spezifische API namens UiHelper
im Paket com.google.android.filament.android
bereit. Sie müssen lediglich einen Render-Callback für den Helfer festlegen und Ihr SurfaceView
oder TextureView
daran anhängen. Sie sind weiterhin für die Erstellung der Swap-Kette im onNativeWindowChanged()
-Rückruf verantwortlich.
Filament wird auf iOS 11.0 und höher unterstützt. Beispiele für die Verwendung von Filament unter iOS finden Sie ios/samples
.
Filament unter iOS entspricht weitgehend dem nativen Rendering mit C++. Ein CAEAGLLayer
oder CAMetalLayer
wird an die Methode createSwapChain
übergeben. Filament für iOS unterstützt sowohl Metal (bevorzugt) als auch OpenGL ES.
Um zu beginnen, können Sie die Texturen und Umgebungskarten verwenden, die sich in third_party/textures
bzw. third_party/environments
befinden. Diese Assets stehen unter der CC0-Lizenz. Weitere Informationen zu den Originalautoren finden Sie in den jeweiligen URL.txt
Dateien.
Umgebungen müssen mit cmgen
oder der libiblprefilter
-Bibliothek vorverarbeitet werden.
Bitte lesen und befolgen Sie die Schritte in CONTRIBUTING.md. Stellen Sie sicher, dass Sie mit dem Codestil vertraut sind.
Dieses Repository enthält nicht nur die Kern-Filament-Engine, sondern auch die unterstützenden Bibliotheken und Tools.
android
: Android-Bibliotheken und -Projekte
filamat-android
: Filamentmaterial-Generierungsbibliothek (AAR) für Android
filament-android
: Filamentbibliothek (AAR) für Android
filament-utils-android
: Zusätzliche Dienstprogramme (KTX-Loader, Mathematiktypen usw.)
gltfio-android
: Filament-glTF-Ladebibliothek (AAR) für Android
samples
: Android-spezifische Filament-Beispiele
art
: Quelle für verschiedene Kunstwerke (Logos, PDF-Handbücher usw.)
assets
: 3D-Assets zur Verwendung mit Beispielanwendungen
build
: CMake-Build-Skripte
docs
: Dokumentation
math
: Mathematica-Notizbücher zum Erkunden von BRDFs, Gleichungen usw.
filament
: Filament-Rendering-Engine (minimale Abhängigkeiten)
backend
: Backends/Treiber rendern (Vulkan, Metal, OpenGL/ES)
ide
: Konfigurationsdateien für IDEs (CLion usw.)
ios
: Beispielprojekte für iOS
libs
: Bibliotheken
bluegl
: OpenGL-Bindungen für macOS, Linux und Windows
bluevk
: Vulkan-Bindungen für macOS, Linux, Windows und Android
camutils
: Dienstprogramme zur Kameramanipulation
filabridge
: Bibliothek, die von der Filament-Engine und den Host-Tools gemeinsam genutzt wird
filaflat
: Serialisierungs-/Deserialisierungsbibliothek für Materialien
filagui
: Hilfsbibliothek für Dear ImGui
filamat
: Bibliothek zur Materialgenerierung
filamentapp
: SDL2-Gerüst zum Erstellen von Beispiel-Apps
filameshio
: Winzige Filamesh-Parsing-Bibliothek (siehe auch tools/filamesh
)
geometry
: Mesh-bezogene Dienstprogramme
gltfio
: Loader für glTF 2.0
ibl
: Tools zur IBL-Generierung
image
: Bildfilterung und einfache Transformationen
imageio
: Lesen/Schreiben von Bilddateien, nur für den internen Gebrauch bestimmt
matdbg
: DebugServer zur Überprüfung von Shadern zur Laufzeit (nur Debug-Builds)
math
: Mathe-Bibliothek
mathio
: Unterstützung für mathematische Typen für Ausgabestreams
utils
: Hilfsbibliothek (Threads, Speicher, Datenstrukturen usw.)
viewer
: glTF-Viewer-Bibliothek (erfordert gltfio)
samples
: Beispiel-Desktopanwendungen
shaders
: Shader, die von filamat
und matc
verwendet werden
third_party
: Externe Bibliotheken und Assets
environments
: Umgebungskarten unter CC0-Lizenz, die mit cmgen
verwendet werden können
models
: Modelle unter freizügigen Lizenzen
textures
: Texturen unter CC0-Lizenz
tools
: Host-Tools
cmgen
: Bildbasierter Licht-Asset-Generator
filamesh
: Mesh-Konverter
glslminifier
: Minimiert den GLSL-Quellcode
matc
: Material-Compiler
matinfo
Zeigt Informationen zu Materialien an, die mit matc
zusammengestellt wurden
mipgen
Erzeugt eine Reihe von Miplevels aus einem Quellbild
normal-blending
: Werkzeug zum Überblenden von Normalkarten
resgen
Aggregiert binäre Blobs zu einbettbaren Ressourcen
roughness-prefilter
: Filtert eine Rauheitskarte aus einer Normalenkarte vor, um Aliasing zu reduzieren
specular-color
: Berechnet die Spiegelfarbe von Leitern basierend auf Spektraldaten
web
: JavaScript-Bindungen, Dokumentation und Beispiele
Siehe LIZENZ.
Dies ist kein offiziell unterstütztes Google-Produkt.