Filament — это механизм физического рендеринга в реальном времени для Android, iOS, Linux, macOS, Windows и WebGL. Он спроектирован так, чтобы быть как можно меньшим и максимально эффективным на Android.
Загрузите выпуски Filament, чтобы получить доступ к стабильным сборкам. Архивы выпусков Filament содержат инструменты на стороне хоста, необходимые для создания ресурсов.
Убедитесь, что вы всегда используете инструменты той же версии, что и библиотека времени выполнения. Это особенно важно для matc
(компилятора материалов).
Если вы предпочитаете собирать Filament самостоятельно, обратитесь к нашему руководству по сборке.
Проекты Android могут просто объявлять библиотеки Filament как зависимости Maven:
репозитории { // ... mavenCentral() } зависимости { реализация 'com.google.android.filament:filament-android:1.56.0'}
Вот все библиотеки, доступные в группе com.google.android.filament
:
Артефакт | Описание |
---|---|
Сам механизм рендеринга Filament. | |
Отладочная версия filament-android . | |
Загрузчик glTF 2.0 для Filament зависит от filament-android . | |
Загрузка KTX, математические вычисления Kotlin и утилиты камеры зависят от gltfio-android . | |
Создатель/компилятор материалов во время выполнения. Эта библиотека большая, но содержит полный компилятор/валидатор/оптимизатор шейдеров и поддерживает как OpenGL, так и Vulkan. | |
Гораздо меньшая альтернатива filamat-android , которая может генерировать только шейдеры OpenGL. Он не обеспечивает проверку или оптимизацию. |
Проекты iOS могут использовать CocoaPods для установки последней версии:
модуль 'Нить', '~> 1.56.0'
Filament — подробное объяснение физического рендеринга в реальном времени, графических возможностей и реализации Filament. В этом документе объясняются математические расчеты и обоснование большинства наших решений. Этот документ представляет собой хорошее введение в PBR для графических программистов.
Материалы, полная справочная документация для нашей системы материалов. В этом документе объясняются различные модели материалов, как использовать компилятор материалов matc
и как писать собственные материалы.
Свойства материала, справочный лист для стандартной модели материала.
Собственный C++ API для Android, iOS, Linux, macOS и Windows
API Java/JNI для Android
JavaScript API
OpenGL 4.1+ для Linux, macOS и Windows
OpenGL ES 3.0+ для Android и iOS
Металл для macOS и iOS
Vulkan 1.0 для Android, Linux, macOS и Windows
WebGL 2.0 для всех платформ
Кластерный упреждающий рендерер
Микрофасетный зеркальный BRDF Кука-Торранса
Ламбертовская диффузная BRDF
Пользовательское освещение/затенение поверхности
HDR/линейное освещение
Металлический рабочий процесс
Прозрачное покрытие
Анизотропное освещение
Приближенные полупрозрачные (подповерхностные) материалы
Ткань/ткань/оттенок блеска
Отображение нормалей и отображение окружающей окклюзии
Освещение на основе изображения
Физическая камера (выдержка, чувствительность и диафрагма)
Физические световые единицы
Точечное освещение, точечное освещение и направленный свет.
Зеркальное сглаживание
Точечные, точечные и направленные световые тени
Каскадные тени
Тени EVSM, PCSS, DPCF или PCF
Прозрачные тени
Контактные тени
Окклюзия окружающего пространства экрана
Отражения в экранном пространстве
Преломление экранного пространства
Глобальный туман
Динамическое разрешение (с поддержкой AMD FidelityFX FSR)
HDR цветение
Глубина резкости боке
Несколько преобразователей тонов: общие (настраиваемые), ACES, кинематографические и т. д.
Управление цветом и тоном: масштабирование яркости, отображение гаммы
Цветокоррекция: экспозиция, ночная адаптация, баланс белого, микшер каналов, тени/средние тона/светлые участки, ASC CDL, контрастность, насыщенность и т. д.
ТАА, FXAA, MSAA
Блики экранного пространства
Кодировки
Встроенный
Двоичный
Примитивные типы
Очки
Линии
Линейный цикл
Линейная полоса
Треугольники
Треугольная полоса
Треугольный веер
Анимация
Разреженный аксессуар
Преобразовать анимацию
Линейная интерполяция
Морф анимация
Анимация скина
Совместная анимация
Расширения
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
Вы должны создать Engine
, Renderer
и SwapChain
. SwapChain
создается из собственного указателя окна (например, NSView
в macOS или HWND
в Windows):
Engine* engine = Engine::create(); SwapChain* swapChain = engine->createSwapChain(nativeWindow); Renderer* renderer = engine->createRenderer();
Для рендеринга кадра вам необходимо создать View
, Scene
и Camera
:
Камера* камера = engine->createCamera(EntityManager::get().create()); Просмотр* просмотр = двигатель->createView(); Сцена* сцена = двигатель->createScene(); просмотр->setCamera(камера); просмотр->setScene(сцена);
К сцене добавляются рендеринги:
Рендеринг объекта = EntityManager::get().create();// создаем QuadRenderableManager::Builder(1) .boundingBox({{ -1, -1, -1 }, { 1, 1, 1 }}) .material(0, экземпляр материала) .geometry(0, RenderableManager::PrimitiveType::TRIANGLES, vertexBuffer, indexBuffer, 0, 6) .отбор(ложь) .build(*движок, рендеринг); сцена->addEntity(рендеринг);
Экземпляр материала получается из материала, который сам загружен из двоичного объекта, сгенерированного matc
:
Материал* материал = Материал::Builder() .package((void*) BAKED_MATERIAL_PACKAGE, sizeof(BAKED_MATERIAL_PACKAGE)) .build(*двигатель); MaterialInstance* MaterialInstance = материал->createInstance();
Чтобы узнать больше о материалах и matc
, обратитесь к документации по материалам.
Для рендеринга просто передайте View
в Renderer
:
// BeginFrame() возвращает false, если нам нужно пропустить кадрif (renderer->beginFrame(swapChain)) { // для каждого представления рендерер-> рендер (просмотр); рендерер->endFrame(); }
Полные примеры приложений Filament для Linux, macOS и Windows можно найти в исходных файлах в каталоге samples/
. Все эти примеры основаны на libs/filamentapp/
, который содержит код, создающий собственное окно с помощью SDL2 и инициализирующий движок Filament, средство рендеринга и представления.
Для получения дополнительной информации о том, как подготовить карты среды для освещения на основе изображения, посетите сайт BUILDING.md.
См android/samples
, где приведены примеры использования Filament на Android.
Вы всегда должны сначала инициализировать Filament, вызвав Filament.init()
.
Рендеринг с помощью Filament на Android аналогичен рендерингу из машинного кода (API практически одинаковы для разных языков). Вы можете выполнить рендеринг в Surface
, передав Surface
методу createSwapChain
. Это позволяет вам выполнять рендеринг в SurfaceTexture
, TextureView
или SurfaceView
. Чтобы упростить задачу, мы предоставляем специальный API для Android под названием UiHelper
в пакете com.google.android.filament.android
. Все, что вам нужно сделать, это установить обратный вызов рендеринга для помощника и прикрепить к нему SurfaceView
или TextureView
. Вы по-прежнему несете ответственность за создание цепочки обмена в обратном вызове onNativeWindowChanged()
.
Filament поддерживается в iOS 11.0 и более поздних версиях. См. ios/samples
для примеров использования Filament на iOS.
Filament в iOS во многом аналогичен встроенному рендерингу на C++. CAEAGLLayer
или CAMetalLayer
передаются методу createSwapChain
. Filament для iOS поддерживает как Metal (предпочтительно), так и OpenGL ES.
Для начала вы можете использовать текстуры и карты окружения, которые находятся соответственно в third_party/textures
и third_party/environments
. Эти активы находятся под лицензией CC0. Пожалуйста, обратитесь к соответствующим файлам URL.txt
, чтобы узнать больше об первоначальных авторах.
Среды должны быть предварительно обработаны с помощью cmgen
или библиотеки libiblprefilter
.
Пожалуйста, прочитайте и следуйте инструкциям в CONTRIBUTING.md. Убедитесь, что вы знакомы со стилем кода.
Этот репозиторий содержит не только основной движок Filament, но также поддерживающие его библиотеки и инструменты.
android
: библиотеки и проекты Android.
filamat-android
: Библиотека генерации материалов накаливания (AAR) для Android.
filament-android
: Библиотека нитей (AAR) для Android.
filament-utils-android
: дополнительные утилиты (загрузчик KTX, математические типы и т. д.).
gltfio-android
: библиотека загрузки Filament glTF (AAR) для Android.
samples
: образцы нити для Android.
art
: источник различных иллюстраций (логотипов, PDF-руководств и т. д.).
assets
: 3D-ресурсы для использования с примерами приложений.
build
: сценарии сборки CMake
docs
: Документация
math
: блокноты Mathematica, используемые для изучения BRDF, уравнений и т. д.
filament
: механизм рендеринга нити (минимальные зависимости)
backend
: рендеринг бэкендов/драйверов (Vulkan, Metal, OpenGL/ES).
ide
: файлы конфигурации для IDE (CLion и т. д.).
ios
: примеры проектов для iOS.
libs
: Библиотеки
bluegl
: привязки OpenGL для macOS, Linux и Windows.
bluevk
: привязки Vulkan для macOS, Linux, Windows и Android.
camutils
: утилиты для управления камерой.
filabridge
: библиотека, совместно используемая движком Filament и хост-инструментами.
filaflat
: библиотека сериализации/десериализации, используемая для материалов.
filagui
: Вспомогательная библиотека для Dear ImGui
filamat
: библиотека генерации материалов.
filamentapp
: скелет SDL2 для создания примеров приложений.
filameshio
: библиотека анализа крошечной филамеши (см. также 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
: карты среды под лицензией CC0, которые можно использовать с cmgen
models
: Модели под разрешительной лицензией.
textures
: Текстуры по лицензии CC0.
tools
: Инструменты хоста
cmgen
: Генератор ресурсов освещения на основе изображений.
filamesh
: конвертер сетки
glslminifier
: минимизирует исходный код GLSL.
matc
: Компилятор материалов
matinfo
Отображает информацию о материалах, скомпилированных с помощью matc
mipgen
Генерирует серию mip-уровней из исходного изображения.
normal-blending
: инструмент для смешивания карт нормалей.
resgen
Агрегирует двоичные объекты во встраиваемые ресурсы.
roughness-prefilter
: предварительно фильтрует карту шероховатости из карты нормалей, чтобы уменьшить наложения.
specular-color
: вычисляет зеркальный цвет проводников на основе спектральных данных.
web
: привязки JavaScript, документация и примеры.
Пожалуйста, ознакомьтесь с ЛИЦЕНЗИЕЙ.
Это не официально поддерживаемый продукт Google.