Filament es un motor de renderizado físico en tiempo real para Android, iOS, Linux, macOS, Windows y WebGL. Está diseñado para ser lo más pequeño posible y lo más eficiente posible en Android.
Descargue las versiones de Filament para acceder a versiones estables. Los archivos de liberación de filamentos contienen herramientas del lado del host necesarias para generar activos.
Asegúrese de utilizar siempre herramientas de la misma versión que la biblioteca en tiempo de ejecución. Esto es particularmente importante para matc
(compilador de materiales).
Si prefiere construir Filament usted mismo, consulte nuestro manual de construcción.
Los proyectos de Android pueden simplemente declarar bibliotecas Filament como dependencias de Maven:
repositorios { // ... expertoCentral() }dependencias { implementación 'com.google.android.filament:filament-android:1.56.0'}
Aquí están todas las bibliotecas disponibles en el grupo com.google.android.filament
:
Artefacto | Descripción |
---|---|
El propio motor de renderizado de filamentos. | |
Versión de depuración de filament-android . | |
Un cargador glTF 2.0 para Filament depende de filament-android . | |
La carga de KTX, las matemáticas de Kotlin y las utilidades de la cámara dependen de gltfio-android . | |
Un generador/compilador de materiales en tiempo de ejecución. Esta biblioteca es grande pero contiene un compilador/validador/optimizador de sombreadores completo y es compatible con OpenGL y Vulkan. | |
Una alternativa mucho más pequeña a filamat-android que sólo puede generar sombreadores OpenGL. No proporciona validación ni optimizaciones. |
Los proyectos de iOS pueden usar CocoaPods para instalar la última versión:
pod 'Filamento', '~> 1.56.0'
Filament, una explicación detallada del renderizado físico en tiempo real, las capacidades gráficas y la implementación de Filament. Este documento explica las matemáticas y el razonamiento detrás de la mayoría de nuestras decisiones. Este documento es una buena introducción a PBR para programadores de gráficos.
Materiales, la documentación de referencia completa de nuestro sistema de materiales. Este documento explica nuestros diferentes modelos de materiales, cómo utilizar el compilador de materiales matc
y cómo escribir materiales personalizados.
Propiedades del material, una hoja de referencia para el modelo de material estándar.
API nativa de C++ para Android, iOS, Linux, macOS y Windows
API Java/JNI para Android
API de JavaScript
OpenGL 4.1+ para Linux, macOS y Windows
OpenGL ES 3.0+ para Android e iOS
Metal para macOS e iOS
Vulkan 1.0 para Android, Linux, macOS y Windows
WebGL 2.0 para todas las plataformas
Representador directo agrupado
BRDF especular microfacetado Cook-Torrance
BRDF difuso lambertiano
Iluminación personalizada/sombreado de superficies
HDR/iluminación lineal
Flujo de trabajo metálico
capa transparente
Iluminación anisotrópica
Materiales translúcidos aproximados (subsuperficiales)
Tela/tela/sombreado brillante
Mapeo normal y mapeo de oclusión ambiental
Iluminación basada en imágenes
Cámara basada físicamente (velocidad de obturación, sensibilidad y apertura)
Unidades de luz físicas
Luces puntuales, focos y luz direccional.
Antialiasing especular
Sombras de luz puntuales, puntuales y direccionales
Sombras en cascada
Sombras EVSM, PCSS, DPCF o PCF
Sombras transparentes
Sombras de contacto
Oclusión ambiental del espacio de la pantalla
Reflejos del espacio de la pantalla
Refracción del espacio de pantalla
Niebla global
Resolución dinámica (con soporte para AMD FidelityFX FSR)
floración hdr
Bokeh de profundidad de campo
Múltiples mapeadores de tonos: genéricos (personalizables), ACES, fílmicos, etc.
Gestión de color y tono: escalado de luminancia, mapeo de gama
Graduación de color: exposición, adaptación nocturna, balance de blancos, mezclador de canales, sombras/medios tonos/altas luces, ASC CDL, contraste, saturación, etc.
TAA, FXAA, MSAA
Destellos de lentes en el espacio de la pantalla
Codificaciones
Incrustado
Binario
Tipos primitivos
Agujas
Pauta
Bucle de línea
Tira de línea
Triángulos
Tira triangular
Abanico Triangular
Animación
Accesor escaso
Transformar animación
Interpolación lineal
Animación de transformación
Animación de piel
Animación conjunta
Extensiones
KHR_draco_mesh_compression
KHR_luces_puntual
KHR_materials_clearcoat
KHR_materiales_emissive_strength
KHR_materiales_ior
KHR_materials_pbrBrillo Especular
KHR_materiales_brillo
KHR_materiales_transmision
KHR_materiales_unlit
KHR_materiales_variantes
KHR_materiales_volumen
KHR_materiales_especular
KHR_mesh_cuantización
KHR_texture_basisu
KHR_textura_transformación
EXT_meshopt_compression
Debes crear un Engine
, un Renderer
y un SwapChain
. SwapChain
se crea a partir de un puntero de ventana nativo (un NSView
en macOS o un HWND
en Windows, por ejemplo):
Motor* motor = Motor::create(); SwapChain* swapChain = motor->createSwapChain(nativeWindow); Renderizador* renderizador = motor->createRenderer();
Para renderizar un fotograma debes crear una View
, una Scene
y una Camera
:
Cámara* cámara = motor->createCamera(EntityManager::get().create()); Ver* ver = motor->createView(); Escena* escena = motor->createScene(); ver->setCamera(cámara); ver->setScene(escena);
Se agregan renderizados a la escena:
Entidad renderizable = EntityManager::get().create();// construye un quadRenderableManager::Builder(1) .boundingBox({{ -1, -1, -1 }, { 1, 1, 1 }}) .material(0, instancia de material) .geometry(0, RenderableManager::PrimitiveType::TRIÁNGULOS, vertexBuffer, indexBuffer, 0, 6) .culling(falso) .build(*motor, renderizable); escena->addEntity(renderizable);
La instancia de material se obtiene de un material, cargado a su vez desde un blob binario generado por matc
:
Material* material = Material::Constructor() .package((void*) BAKED_MATERIAL_PACKAGE, tamaño de(BAKED_MATERIAL_PACKAGE)) .build(*motor); MaterialInstancia* materialInstancia = material->createInstancia();
Para obtener más información sobre materiales y matc
, consulte la documentación de materiales.
Para renderizar, simplemente pase la View
al Renderer
:
// comenzarFrame() devuelve falso si necesitamos omitir un marcoif (renderer->beginFrame(swapChain)) { // para cada Vista renderizador->renderizar(ver); renderizador->endFrame(); }
Para ver ejemplos completos de aplicaciones Filament de Linux, macOS y Windows, consulte los archivos fuente en el directorio samples/
. Todos estos ejemplos se basan en libs/filamentapp/
que contiene el código que crea una ventana nativa con SDL2 e inicializa el motor, el renderizador y las vistas de Filament.
Para obtener más información sobre cómo preparar mapas ambientales para iluminación basada en imágenes, consulte BUILDING.md.
Consulte android/samples
para ver ejemplos de cómo usar Filament en Android.
Siempre debes inicializar primero Filament llamando Filament.init()
.
La renderización con Filament en Android es similar a la renderización a partir de código nativo (las API son prácticamente las mismas en todos los idiomas). Puedes renderizar en una Surface
pasando una Surface
al método createSwapChain
. Esto le permite renderizar en SurfaceTexture
, TextureView
o SurfaceView
. Para facilitar las cosas, proporcionamos una API específica de Android llamada UiHelper
en el paquete com.google.android.filament.android
. Todo lo que necesita hacer es configurar una devolución de llamada de renderizado en el asistente y adjuntarle su SurfaceView
o TextureView
. Aún eres responsable de crear la cadena de intercambio en la devolución de llamada onNativeWindowChanged()
.
Filament es compatible con iOS 11.0 y superior. Consulte ios/samples
para ver ejemplos de uso de Filament en iOS.
El filamento en iOS es en gran medida igual que el renderizado nativo con C++. Se pasa un CAEAGLLayer
o CAMetalLayer
al método createSwapChain
. Filament para iOS es compatible con Metal (preferido) y OpenGL ES.
Para comenzar, puede utilizar las texturas y los mapas de entorno que se encuentran respectivamente third_party/textures
third_party/environments
. Estos activos están bajo licencia CC0. Consulte sus respectivos archivos URL.txt
para saber más sobre los autores originales.
Los entornos deben procesarse previamente usando cmgen
o usando la biblioteca libiblprefilter
.
Lea y siga los pasos en CONTRIBUTING.md. Asegúrese de estar familiarizado con el estilo del código.
Este repositorio no solo contiene el motor principal de Filament, sino también sus bibliotecas y herramientas de soporte.
android
: bibliotecas y proyectos de Android
filamat-android
: Biblioteca de generación de materiales de filamentos (AAR) para Android
filament-android
: biblioteca de filamentos (AAR) para Android
filament-utils-android
: utilidades adicionales (cargador KTX, tipos matemáticos, etc.)
gltfio-android
: Biblioteca de carga de filamentos glTF (AAR) para Android
samples
: muestras de filamentos específicas de Android
art
: Fuente de varias obras de arte (logotipos, manuales en PDF, etc.)
assets
: activos 3D para usar con aplicaciones de muestra
build
: scripts de compilación de CMake
docs
: Documentación
math
: cuadernos de Mathematica utilizados para explorar BRDF, ecuaciones, etc.
filament
: motor de renderizado de filamentos (dependencias mínimas)
backend
: Representación de backends/controladores (Vulkan, Metal, OpenGL/ES)
ide
: Archivos de configuración para IDE (CLion, etc.)
ios
: proyectos de muestra para iOS
libs
: Bibliotecas
bluegl
: enlaces OpenGL para macOS, Linux y Windows
bluevk
: enlaces de Vulkan para macOS, Linux, Windows y Android
camutils
: Utilidades de manipulación de cámara.
filabridge
: biblioteca compartida por el motor Filament y las herramientas de host
filaflat
: biblioteca de serialización/deserialización utilizada para materiales
filagui
: Biblioteca auxiliar para Dear ImGui
filamat
: biblioteca de generación de materiales
filamentapp
: esqueleto SDL2 para crear aplicaciones de muestra
filameshio
: pequeña biblioteca de análisis de filamesh (ver también tools/filamesh
)
geometry
: utilidades relacionadas con malla
gltfio
: Cargador para glTF 2.0
ibl
: herramientas de generación de IBL
image
: Filtrado de imágenes y transformaciones simples.
imageio
: lectura/escritura de archivos de imagen, solo para uso interno
matdbg
: DebugServer para inspeccionar sombreadores en tiempo de ejecución (solo compilaciones de depuración)
math
: biblioteca de matemáticas
mathio
: compatibilidad con tipos matemáticos para flujos de salida
utils
: Biblioteca de utilidades (subprocesos, memoria, estructuras de datos, etc.)
viewer
: biblioteca de visor glTF (requiere gltfio)
samples
: aplicaciones de escritorio de muestra
shaders
: sombreadores utilizados por filamat
y matc
third_party
: bibliotecas y activos externos
environments
: Mapas de entorno bajo licencia CC0 que se pueden utilizar con cmgen
models
: Modelos bajo licencias permisivas
textures
: Texturas bajo licencia CC0
tools
: herramientas de host
cmgen
: generador de recursos de iluminación basado en imágenes
filamesh
: convertidor de malla
glslminifier
: Minimiza el código fuente GLSL
matc
: compilador de materiales
matinfo
Muestra información sobre materiales compilados con matc
mipgen
Genera una serie de niveles mip a partir de una imagen fuente.
normal-blending
: herramienta para combinar mapas normales.
resgen
Agrega blobs binarios en recursos integrables
roughness-prefilter
: Prefiltra un mapa de rugosidad de un mapa normal para reducir el alias.
specular-color
: Calcula el color especular de los conductores basándose en datos espectrales
web
: enlaces, documentación y ejemplos de JavaScript
Por favor consulte LICENCIA.
Este no es un producto de Google con soporte oficial.