Filament é um mecanismo de renderização baseado em física em tempo real para Android, iOS, Linux, macOS, Windows e WebGL. Ele foi projetado para ser o menor e o mais eficiente possível no Android.
Baixe as versões do Filament para acessar compilações estáveis. Os arquivos de lançamento do Filament contêm ferramentas do lado do host necessárias para gerar ativos.
Certifique-se de sempre usar ferramentas da mesma versão da biblioteca de tempo de execução. Isto é particularmente importante para matc
(compilador de materiais).
Se você preferir construir o Filament sozinho, consulte nosso manual de construção.
Os projetos Android podem simplesmente declarar bibliotecas Filament como dependências do Maven:
repositórios { // ... mavenCentral() }dependências { implementação 'com.google.android.filament:filament-android:1.56.0'}
Aqui estão todas as bibliotecas disponíveis no grupo com.google.android.filament
:
Artefato | Descrição |
---|---|
O próprio mecanismo de renderização do Filament. | |
Versão de depuração do filament-android . | |
Um carregador glTF 2.0 para Filament depende de filament-android . | |
Carregamento KTX, matemática Kotlin e utilitários de câmera dependem de gltfio-android . | |
Um construtor/compilador de material de tempo de execução. Esta biblioteca é grande, mas contém um compilador/validador/otimizador de shader completo e suporta OpenGL e Vulkan. | |
Uma alternativa muito menor ao filamat-android que só pode gerar shaders OpenGL. Não fornece validação ou otimizações. |
Projetos iOS podem usar CocoaPods para instalar a versão mais recente:
pod 'Filamento', '~> 1.56.0'
Filament, uma explicação detalhada da renderização física em tempo real, dos recursos gráficos e da implementação do Filament. Este documento explica a matemática e o raciocínio por trás da maioria das nossas decisões. Este documento é uma boa introdução ao PBR para programadores gráficos.
Materiais, a documentação de referência completa para nosso sistema de materiais. Este documento explica nossos diferentes modelos de materiais, como usar o compilador de materiais matc
e como escrever materiais personalizados.
Propriedades do material, uma folha de referência para o modelo de material padrão.
API C++ nativa para Android, iOS, Linux, macOS e Windows
API Java/JNI para Android
API JavaScript
OpenGL 4.1+ para Linux, macOS e Windows
OpenGL ES 3.0+ para Android e iOS
Metal para macOS e iOS
Vulkan 1.0 para Android, Linux, macOS e Windows
WebGL 2.0 para todas as plataformas
Renderizador direto clusterizado
Microfaceta especular BRDF Cook-Torrance
BRDF difuso lambertiano
Iluminação personalizada/sombreamento de superfície
Iluminação HDR/linear
Fluxo de trabalho metálico
Casaco transparente
Iluminação anisotrópica
Materiais translúcidos aproximados (subsuperficiais)
Sombreamento de tecido/tecido/brilho
Mapeamento normal e mapeamento de oclusão ambiental
Iluminação baseada em imagem
Câmera com base física (velocidade do obturador, sensibilidade e abertura)
Unidades físicas de luz
Luzes pontuais, luzes spot e luz direcional
Anti-aliasing especular
Sombras de luz pontuais, pontuais e direcionais
Sombras em cascata
Sombras EVSM, PCSS, DPCF ou PCF
Sombras transparentes
Sombras de contato
Oclusão ambiental no espaço da tela
Reflexões no espaço da tela
Refração do espaço da tela
Névoa global
Resolução dinâmica (com suporte para AMD FidelityFX FSR)
Floração HDR
Profundidade de campo bokeh
Mapeadores de tons múltiplos: genéricos (personalizáveis), ACES, fílmicos, etc.
Gerenciamento de cores e tons: escala de luminância, mapeamento de gama
Classificação de cores: exposição, adaptação noturna, balanço de branco, misturador de canais, sombras/tons médios/realces, ASC CDL, contraste, saturação, etc.
TAA, FXAA, MSAA
Reflexos de lente no espaço da tela
Codificações
Incorporado
Binário
Tipos Primitivos
Pontos
Linhas
Loop de linha
Faixa de linha
Triângulos
Faixa Triângulo
Ventilador Triângulo
Animação
Acessador esparso
Transformar animação
Interpolação linear
Animação de transformação
Animação de pele
Animação conjunta
Extensões
KHR_draco_mesh_compression
KHR_lights_punctual
KHR_materiais_clearcoat
KHR_materiais_emissive_strength
KHR_materiais_ior
KHR_materials_pbrSpecularBrilho
KHR_materiais_sheen
KHR_materiais_transmissão
KHR_materiais_unlit
KHR_materiais_variants
KHR_materials_volume
KHR_materiais_especular
KHR_mesh_quantização
KHR_texture_basisu
KHR_texture_transform
EXT_meshopt_compression
Você deve criar um Engine
, um Renderer
e um SwapChain
. O SwapChain
é criado a partir de um ponteiro de janela nativo (um NSView
no macOS ou um HWND
no Windows, por exemplo):
Motor* motor = Motor::create(); SwapChain* swapChain = motor->createSwapChain(nativeWindow); Renderizador* renderizador = engine->createRenderer();
Para renderizar um quadro você deve então criar uma View
, uma Scene
e uma Camera
:
Câmera* câmera = engine->createCamera(EntityManager::get().create()); Visualizar* visualizar = mecanismo->createView(); Cena* cena = motor->createScene(); visualizar->setCamera(câmera); visualizar->setScene(cena);
Os renderizáveis são adicionados à cena:
Entidade renderizável = EntityManager::get().create();// construir um quadRenderableManager::Builder(1) .boundingBox({{ -1, -1, -1 }, { 1, 1, 1 }}) .material(0,materialInstance) .geometry(0, RenderableManager::PrimitiveType::TRIANGLES, vertexBuffer, indexBuffer, 0, 6) .culling(falso) .build(*motor, renderizável); cena->addEntity(renderizável);
A instância do material é obtida a partir de um material, ele próprio carregado a partir de um blob binário gerado por matc
:
Material* material = Material::Construtor() .package((void*) BAKED_MATERIAL_PACKAGE, sizeof(BAKED_MATERIAL_PACKAGE)) .build(*motor); MaterialInstance* materialInstance = material->createInstance();
Para saber mais sobre materiais e matc
, consulte a documentação dos materiais.
Para renderizar, basta passar a View
para o Renderer
:
// BeginFrame() retorna false se precisarmos pular um frameif (renderer->beginFrame(swapChain)) { // para cada View renderizador->renderizar(visualizar); renderizador->endFrame(); }
Para obter exemplos completos de aplicativos Linux, macOS e Windows Filament, consulte os arquivos de origem no diretório samples/
. Esses exemplos são todos baseados em libs/filamentapp/
que contém o código que cria uma janela nativa com SDL2 e inicializa o mecanismo, o renderizador e as visualizações do Filament.
Para obter mais informações sobre como preparar mapas ambientais para iluminação baseada em imagem, consulte BUILDING.md.
Veja android/samples
para exemplos de como usar o Filament no Android.
Você deve sempre inicializar primeiro o Filament chamando Filament.init()
.
A renderização com Filament no Android é semelhante à renderização a partir de código nativo (as APIs são basicamente as mesmas em todos os idiomas). Você pode renderizar em um Surface
passando um Surface
para o método createSwapChain
. Isso permite renderizar em SurfaceTexture
, TextureView
ou SurfaceView
. Para facilitar as coisas, fornecemos uma API específica do Android chamada UiHelper
no pacote com.google.android.filament.android
. Tudo o que você precisa fazer é definir um retorno de chamada de renderização no auxiliar e anexar seu SurfaceView
ou TextureView
a ele. Você ainda é responsável por criar a cadeia de troca no retorno de chamada onNativeWindowChanged()
.
O filamento é compatível com iOS 11.0 e superior. Veja ios/samples
para exemplos de uso do Filament no iOS.
Filament no iOS é basicamente igual à renderização nativa com C++. Um CAEAGLLayer
ou CAMetalLayer
é passado para o método createSwapChain
. Filament para iOS suporta Metal (preferencial) e OpenGL ES.
Para começar, você pode usar as texturas e os mapas de ambiente encontrados respectivamente em third_party/textures
third_party/environments
. Esses ativos estão sob licença CC0. Consulte seus respectivos arquivos URL.txt
para saber mais sobre os autores originais.
Os ambientes devem ser pré-processados usando cmgen
ou usando a biblioteca libiblprefilter
.
Leia e siga as etapas em CONTRIBUTING.md. Certifique-se de estar familiarizado com o estilo do código.
Este repositório não contém apenas o mecanismo principal do Filament, mas também suas bibliotecas e ferramentas de suporte.
android
: Bibliotecas e projetos Android
filamat-android
: Biblioteca de geração de materiais de filamento (AAR) para Android
filament-android
: biblioteca de filamentos (AAR) para Android
filament-utils-android
: Utilitários extras (carregador KTX, tipos matemáticos, etc.)
gltfio-android
: Biblioteca de carregamento Filament glTF (AAR) para Android
samples
: amostras de filamento específicas do Android
art
: Fonte para diversas obras de arte (logotipos, manuais em PDF, etc.)
assets
: ativos 3D para usar com aplicativos de amostra
build
: scripts de construção do CMake
docs
: Documentação
math
: cadernos do Mathematica usados para explorar BRDFs, equações, etc.
filament
: Mecanismo de renderização de filamento (dependências mínimas)
backend
: Renderização de backends/drivers (Vulkan, Metal, OpenGL/ES)
ide
: Arquivos de configuração para IDEs (CLion, etc.)
ios
: exemplos de projetos para iOS
libs
: Bibliotecas
bluegl
: ligações OpenGL para macOS, Linux e Windows
bluevk
: ligações Vulkan para macOS, Linux, Windows e Android
camutils
: utilitários de manipulação de câmera
filabridge
: Biblioteca compartilhada pelo mecanismo Filament e ferramentas host
filaflat
: Biblioteca de serialização/desserialização usada para materiais
filagui
: Biblioteca auxiliar para Dear ImGui
filamat
: Biblioteca de geração de materiais
filamentapp
: esqueleto SDL2 para construir aplicativos de exemplo
filameshio
: Pequena biblioteca de análise de filamesh (veja também tools/filamesh
)
geometry
: utilitários relacionados à malha
gltfio
: Carregador para glTF 2.0
ibl
: ferramentas de geração de IBL
image
: Filtragem de imagens e transformações simples
imageio
: Leitura/gravação de arquivo de imagem, destinado apenas para uso interno
matdbg
: DebugServer para inspecionar shaders em tempo de execução (somente compilações de depuração)
math
: Biblioteca de matemática
mathio
: suporte a tipos matemáticos para fluxos de saída
utils
: Biblioteca de utilitários (threads, memória, estruturas de dados, etc.)
viewer
: biblioteca do visualizador glTF (requer gltfio)
samples
: exemplos de aplicativos de desktop
shaders
: Shaders usados por filamat
e matc
third_party
: bibliotecas e ativos externos
environments
: Mapas ambientais sob licença CC0 que podem ser usados com cmgen
models
: Modelos sob licenças permissivas
textures
: Texturas sob licença CC0
tools
: ferramentas de host
cmgen
: gerador de ativos de iluminação baseado em imagem
filamesh
: Conversor de malha
glslminifier
: Minimiza o código fonte GLSL
matc
: compilador de materiais
matinfo
Exibe informações sobre materiais compilados com matc
mipgen
Gera uma série de miplevels a partir de uma imagem de origem
normal-blending
: Ferramenta para mesclar mapas normais
resgen
Agrega blobs binários em recursos incorporáveis
roughness-prefilter
: Pré-filtra um mapa de rugosidade de um mapa normal para reduzir o aliasing
specular-color
: Calcula a cor especular dos condutores com base em dados espectrais
web
: ligações JavaScript, documentação e exemplos
Consulte LICENÇA.
Este não é um produto do Google com suporte oficial.