Filament est un moteur de rendu physique en temps réel pour Android, iOS, Linux, macOS, Windows et WebGL. Il est conçu pour être le plus petit possible et le plus efficace possible sur Android.
Téléchargez les versions de Filament pour accéder aux versions stables. Les archives de versions de filament contiennent des outils côté hôte requis pour générer des actifs.
Assurez-vous de toujours utiliser les outils de la même version que la bibliothèque d'exécution. Ceci est particulièrement important pour matc
(compilateur de matériaux).
Si vous préférez construire Filament vous-même, veuillez vous référer à notre manuel de construction.
Les projets Android peuvent simplement déclarer les bibliothèques Filament comme dépendances Maven :
dépôts { // ... mavenCentral() }dépendances { implémentation 'com.google.android.filament:filament-android:1.56.0'}
Voici toutes les bibliothèques disponibles dans le groupe com.google.android.filament
:
Artefact | Description |
---|---|
Le moteur de rendu Filament lui-même. | |
Version de débogage de filament-android . | |
Un chargeur glTF 2.0 pour Filament, dépend de filament-android . | |
Le chargement de KTX, les mathématiques Kotlin et les utilitaires de caméra dépendent de gltfio-android . | |
Un constructeur/compilateur de matériel d'exécution. Cette bibliothèque est volumineuse mais contient un compilateur/validateur/optimiseur de shader complet et prend en charge à la fois OpenGL et Vulkan. | |
Une alternative beaucoup plus petite à filamat-android qui ne peut générer que des shaders OpenGL. Il ne fournit ni validation ni optimisation. |
Les projets iOS peuvent utiliser CocoaPods pour installer la dernière version :
pod 'Filament', '~> 1.56.0'
Filament, une explication approfondie du rendu physique en temps réel, des capacités graphiques et de la mise en œuvre de Filament. Ce document explique les calculs et le raisonnement derrière la plupart de nos décisions. Ce document est une bonne introduction au PBR pour les programmeurs graphiques.
Matériaux, la documentation de référence complète de notre système de matériaux. Ce document explique nos différents modèles de matériaux, comment utiliser le compilateur de matériaux matc
et comment écrire des matériaux personnalisés.
Propriétés des matériaux, une feuille de référence pour le modèle de matériau standard.
API C++ native pour Android, iOS, Linux, macOS et Windows
API Java/JNI pour Android
API JavaScript
OpenGL 4.1+ pour Linux, macOS et Windows
OpenGL ES 3.0+ pour Android et iOS
Métal pour macOS et iOS
Vulkan 1.0 pour Android, Linux, macOS et Windows
WebGL 2.0 pour toutes les plateformes
Moteur de rendu direct clusterisé
BRDF spéculaire à microfacettes Cook-Torrance
BRDF diffus lambertien
Éclairage/ombrage de surface personnalisé
Éclairage HDR/linéaire
Flux de travail métallique
Couche transparente
Éclairage anisotrope
Matériaux translucides (sous la surface) approximatifs
Tissu/tissu/ombrage brillant
Cartographie normale et cartographie d'occlusion ambiante
Éclairage basé sur l'image
Appareil photo physique (vitesse d'obturation, sensibilité et ouverture)
Unités d'éclairage physiques
Projecteurs ponctuels, spots et lumière directionnelle
Anticrénelage spéculaire
Ombres lumineuses ponctuelles, ponctuelles et directionnelles
Ombres en cascade
Ombres EVSM, PCSS, DPCF ou PCF
Ombres transparentes
Contacter les ombres
Occlusion ambiante de l'espace écran
Réflexions dans l'espace de l'écran
Réfraction de l'espace écran
Brouillard mondial
Résolution dynamique (avec prise en charge d'AMD FidelityFX FSR)
Floraison HDR
Profondeur de champ bokeh
Mappeurs de tons multiples : génériques (personnalisables), ACES, filmiques, etc.
Gestion des couleurs et des tons : mise à l'échelle de la luminance, mappage de gamme
Etalonnage des couleurs : exposition, adaptation nocturne, balance des blancs, mixeur de canaux, ombres/tons moyens/hauts reflets, ASC CDL, contraste, saturation, etc.
TAA, FXAA, MSAA
Lumières parasites dans l'espace de l'écran
Encodages
Intégré
Binaire
Types primitifs
Points
Lignes
Boucle de ligne
Bande de ligne
Triangles
Bande triangulaire
Éventail triangulaire
Animation
Accesseur clairsemé
Animation de transformation
Interpolation linéaire
Animation de transformation
Animation de la peau
Animation conjointe
Rallonges
KHR_draco_mesh_compression
KHR_lights_ponctuel
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_spéculaire
KHR_mesh_quantisation
KHR_texture_basisu
KHR_texture_transform
EXT_meshopt_compression
Vous devez créer un Engine
, un Renderer
et un SwapChain
. La SwapChain
est créée à partir d'un pointeur de fenêtre natif (un NSView
sur macOS ou un HWND
sur Windows par exemple) :
Moteur* moteur = Moteur::create(); SwapChain* swapChain = moteur->createSwapChain(nativeWindow); Moteur de rendu* renderer = moteur->createRenderer();
Pour rendre une image vous devez ensuite créer une View
, une Scene
et une Camera
:
Caméra* camera = moteur->createCamera(EntityManager::get().create()); View* view = moteur->createView(); Scene* scene = moteur->createScene(); view->setCamera(caméra); view->setScene(scène);
Les rendus sont ajoutés à la scène :
Entity renderable = EntityManager::get().create();// construire un quadRenderableManager::Builder(1) .boundingBox({{ -1, -1, -1 }, { 1, 1, 1 }}) .material(0, matérielInstance) .geometry (0, RenderableManager :: PrimitiveType :: TRIANGLES, vertexBuffer, indexBuffer, 0, 6) .culling (faux) .build(*moteur, rendu); scène->addEntity(rendu);
L'instance matérielle est obtenue à partir d'un matériau, lui-même chargé à partir d'un blob binaire généré par matc
:
Matériau* matériau = Matériau::Builder() .package((void*) BAKED_MATERIAL_PACKAGE, taille de (BAKED_MATERIAL_PACKAGE)) .build(*moteur); MaterialInstance* MaterialInstance = Material->createInstance();
Pour en savoir plus sur les matériaux et matc
, veuillez vous référer à la documentation des matériaux.
Pour effectuer le rendu, passez simplement la View
au Renderer
:
//beginFrame() renvoie false si nous devons ignorer un frameif (renderer->beginFrame(swapChain)) { // pour chaque vue moteur de rendu->render(vue); moteur de rendu->endFrame(); }
Pour des exemples complets d'applications Linux, macOS et Windows Filament, consultez les fichiers sources dans le répertoire samples/
. Ces exemples sont tous basés sur libs/filamentapp/
qui contient le code qui crée une fenêtre native avec SDL2 et initialise le moteur Filament, le moteur de rendu et les vues.
Pour plus d'informations sur la façon de préparer des cartes d'environnement pour l'éclairage basé sur des images, veuillez vous référer à BUILDING.md.
Voir android/samples
pour des exemples d'utilisation de Filament sur Android.
Vous devez toujours d'abord initialiser Filament en appelant Filament.init()
.
Le rendu avec Filament sur Android est similaire au rendu à partir de code natif (les API sont en grande partie les mêmes dans toutes les langues). Vous pouvez effectuer le rendu dans une Surface
en passant une Surface
à la méthode createSwapChain
. Cela vous permet d'effectuer un rendu vers un SurfaceTexture
, un TextureView
ou un SurfaceView
. Pour faciliter les choses, nous fournissons une API spécifique à Android appelée UiHelper
dans le package com.google.android.filament.android
. Tout ce que vous avez à faire est de définir un rappel de rendu sur l'assistant et d'y attacher votre SurfaceView
ou TextureView
. Vous êtes toujours responsable de la création de la chaîne d'échange dans le rappel onNativeWindowChanged()
.
Le filament est pris en charge sur iOS 11.0 et supérieur. Voir ios/samples
pour des exemples d'utilisation de Filament sur iOS.
Le filament sur iOS est en grande partie identique au rendu natif avec C++. Un CAEAGLLayer
ou CAMetalLayer
est transmis à la méthode createSwapChain
. Filament pour iOS prend en charge à la fois Metal (de préférence) et OpenGL ES.
Pour commencer, vous pouvez utiliser les textures et les cartes d'environnement trouvées respectivement dans third_party/textures
et third_party/environments
. Ces actifs sont sous licence CC0. Veuillez vous référer à leurs fichiers URL.txt
respectifs pour en savoir plus sur les auteurs originaux.
Les environnements doivent être prétraités à l'aide cmgen
ou à l'aide de la bibliothèque libiblprefilter
.
Veuillez lire et suivre les étapes dans CONTRIBUTING.md. Assurez-vous que vous connaissez le style de code.
Ce référentiel contient non seulement le moteur principal de Filament, mais également ses bibliothèques et outils de support.
android
: bibliothèques et projets Android
filamat-android
: Bibliothèque de génération de matériaux filamenteux (AAR) pour Android
filament-android
: Bibliothèque de filaments (AAR) pour Android
filament-utils-android
: Utilitaires supplémentaires (chargeur KTX, types mathématiques, etc.)
gltfio-android
: bibliothèque de chargement de filaments glTF (AAR) pour Android
samples
: échantillons de filaments spécifiques à Android
art
: Source de diverses œuvres d'art (logos, manuels PDF, etc.)
assets
: ressources 3D à utiliser avec des exemples d'applications
build
: scripts de construction CMake
docs
: Documentation
math
: cahiers Mathematica utilisés pour explorer les BRDF, les équations, etc.
filament
: Moteur de rendu de filament (dépendances minimales)
backend
: Backends/pilotes de rendu (Vulkan, Metal, OpenGL/ES)
ide
: Fichiers de configuration pour les IDE (CLion, etc.)
ios
: exemples de projets pour iOS
libs
: bibliothèques
bluegl
: liaisons OpenGL pour macOS, Linux et Windows
bluevk
: liaisons Vulkan pour macOS, Linux, Windows et Android
camutils
: utilitaires de manipulation de caméra
filabridge
: Bibliothèque partagée par le moteur Filament et les outils hôtes
filaflat
: Bibliothèque de sérialisation/désérialisation utilisée pour les matériaux
filagui
: Bibliothèque d'aide pour Dear ImGui
filamat
: Bibliothèque de génération de matériaux
filamentapp
: squelette SDL2 pour créer des exemples d'applications
filameshio
: Petite bibliothèque d'analyse de filamesh (voir aussi tools/filamesh
)
geometry
: utilitaires liés au maillage
gltfio
: Chargeur pour glTF 2.0
ibl
: outils de génération IBL
image
: Filtrage d'image et transformations simples
imageio
: Lecture/écriture de fichier image, uniquement destiné à un usage interne
matdbg
: DebugServer pour inspecter les shaders au moment de l'exécution (versions de débogage uniquement)
math
: bibliothèque mathématique
mathio
: Prise en charge des types mathématiques pour les flux de sortie
utils
: Bibliothèque d'utilitaires (threads, mémoire, structures de données, etc.)
viewer
: bibliothèque de visualisation glTF (nécessite gltfio)
samples
: exemples d'applications de bureau
shaders
: Shaders utilisés par filamat
et matc
third_party
: bibliothèques et ressources externes
environments
: Cartes d'environnement sous licence CC0 utilisables avec cmgen
models
: Modèles sous licences permissives
textures
: Textures sous licence CC0
tools
: outils d'hébergement
cmgen
: Générateur d'actifs d'éclairage basé sur l'image
filamesh
: Convertisseur de maillage
glslminifier
: Réduit le code source GLSL
matc
: Compilateur de matériaux
matinfo
Affiche des informations sur les matériaux compilés avec matc
mipgen
Génère une série de miplevels à partir d'une image source
normal-blending
: Outil pour mélanger les cartes normales
resgen
regroupe les blobs binaires en ressources intégrables
roughness-prefilter
: Pré-filtre une carte de rugosité à partir d'une carte normale pour réduire l'alias.
specular-color
: calcule la couleur spéculaire des conducteurs en fonction des données spectrales
web
: liaisons JavaScript, documentation et exemples
Veuillez consulter LICENCE.
Il ne s'agit pas d'un produit Google officiellement pris en charge.