Филамент — это движок рендеринга на основе физики для Android, iOS, Linux, macOS, Windows и WebGL. Он разработан для того, чтобы быть как можно более компактным и эффективным на платформе Android.
Скачайте релизы Filament, чтобы получить доступ к стабильным сборкам. Архивы релизов Filament содержат инструменты для хоста, которые необходимы для генерации активов.
Убедитесь, что вы всегда используете инструменты из того же релиза, что и библиотека выполнения. Это особенно важно для matc
(компилятор материалов).
Если вы предпочитаете собрать Filament самостоятельно, обратитесь к нашей руководству по сборке.
Проекты Android могут просто объявить библиотеки Filament как зависимости Maven:```gradle repositories { // ... mavenCentral() }
dependencies {
implementation 'com.google.android.filament:filament-android:1.61.0'
}
```Вот все доступные библиотеки в группе com.google.android.filament
:
pod 'Filament', '~> 1.61.0'
matc
и как писать пользовательские материалы.
OpenGL 4.1+ для Linux, macOS и Windows
OpenGL ES 3.0+ для Android и iOS
Metal для macOS и iOS
Vulkan 1.0 для Android, Linux, macOS и Windows
WebGL 2.0 для всех платформ### Рендеринг
Кластерный фронтенд рендерер
Cook-Torrance микроповерхностный спекулятивный BRDF
Lambertian диффузный BRDF
Пользовательское освещение/поверхностное затенение
HDR/линейное освещение
Металлический рабочий процесс
Прозрачный слой
Анизотропное освещение
Приближенный транслюцированный (субповерхностный) материал
Рендеринг тканей/текстиля/блеска
Нормальное отображение и отображение окружения
Изображение-базированное освещение
Физически-базированный объектив (скорость затвора, чувствительность и диафрагма)
Физические единицы света
Точечные, направленные и сфокусированные источники света
Спекулятивное анти-алиасирование
Точечные, сфокусированные и направленные тени
Каскадные тени
EVSM, PCSS, DPCF или PCF тени
Прозрачные тени
Контактные тени
Screen-space ambient occlusion
Screen-space reflections
Screen-space refraction
Глобальная дымка
Динамическое разрешение (с поддержкой AMD FidelityFX FSR)
HDR размытие
Глубина резкости (боке)
Множественные карты тона: универсальная (настраиваемая), ACES, кинематографическая, и т.д.
Управление цветом и тоном: масштабирование яркости, отображение цветового пространства
Градация цвета: экспозиция, адаптация к ночному режиму, баланс белого, миксер каналов, тени/средние тона/высокие тона, ASC CDL, контраст, насыщенность, и т.д.
TAA, FXAA, MSAA
Эффекты линз на экране### glTF 2.0
Кодировки
Типы примитивов
Анимация
Расширения
Вы должны создать Engine
, Renderer
и SwapChain
. SwapChain
создается из указателя на нативное окно (например, NSView
на macOS или HWND
на Windows):
Engine* engine = Engine::create();
SwapChain* swapChain = engine->createSwapChain(nativeWindow);
Renderer* renderer = engine->createRenderer();
Чтобы отрендерить кадр, вам нужно создать View
, Scene
и Camera
:
Camera* camera = engine->createCamera(EntityManager::get().create());
View* view = engine->createView();
Scene* scene = engine->createScene();
view->setCamera(camera);
view->setScene(scene);
Рендерабельные объекты добавляются в сцену:```c++ Entity renderable = EntityManager::get().create(); // создание квадрата RenderableManager::Builder(1) .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);
Материальный экземпляр получается из материала, сам загруженного из двоичного блока, сгенерированного командой `matc`:```c++
Material* material = Material::Builder()
.package((void*) BAKED_MATERIAL_PACKAGE, sizeof(BAKED_MATERIAL_PACKAGE))
.build(*engine);
MaterialInstance* materialInstance = material->createInstance();
Для получения дополнительной информации о материалах и matc
обратитесь к
документации по материалам.
Для рендеринга просто передайте View
в Renderer
:
// beginFrame() возвращает false, если нам нужно пропустить кадр
if (renderer->beginFrame(swapChain)) {
// для каждого View
renderer->render(view);
renderer->endFrame();
}
Для полных примеров приложений Filament для Linux, macOS и Windows просмотрите исходные файлы
в директории samples/
. Эти примеры основаны на libs/filamentapp/
, который содержит код для создания
нативного окна с помощью SDL2 и инициализации движка Filament, рендерера и представлений.
Для получения дополнительной информации о подготовке карт окружающей среды для освещения на основе изображений обратитесь к BUILDING.md.
Для примеров использования Filament на Android просмотрите директорию android/samples
.
Вы всегда должны инициализировать Filament вызовом Filament.init()
.Рендеринг с использованием Filament на Android похож на рендеринг из нативного кода (API в основном одинаковы для всех языков). Вы можете рендерить в Surface
, передав Surface
в метод createSwapChain
. Это позволяет вам рендерить в SurfaceTexture
, TextureView
или SurfaceView
. Для упрощения задачи мы предоставляем специфическую для Android API под названием UiHelper
в пакете com.google.android.filament.android
. Все, что вам нужно сделать, это установить обработчик рендера на помощнике и подключить ваш SurfaceView
или TextureView
к нему. Вы все равно отвечаете за создание цепочки обмена в методе onNativeWindowChanged()
.### iOS
Filament поддерживается на iOS 11.0 и выше. Для примеров использования Filament на iOS просмотрите директорию ios/samples
.
Использование Filament на iOS в основном аналогично нативному рендерингу с использованием C++. CAEAGLLayer
или CAMetalLayer
передаются в метод createSwapChain
. Filament для iOS поддерживает как Metal (предпочтительно), так и OpenGL ES.
Чтобы начать работу, вы можете использовать текстуры и карты окружения, найденные соответственно в директориях third_party/textures
и third_party/environments
. Эти активы находятся под лицензией CC0. Пожалуйста, см. соответствующие файлы URL.txt
, чтобы узнать больше о первоначальных авторах.
Окружения должны быть предварительно обработаны с помощью
cmgen
или с помощью библиотеки libiblprefilter
.
Пожалуйста, прочитайте и следуйте шагам в CONTRIBUTING.md. Убедитесь, что вы знакомы с стилем кода.
android
: Библиотеки и проекты для Android
filamat-android
: Библиотека для генерации материалов Filament (AAR) для Androidfilament-android
: Библиотека Filament (AAR) для Androidfilament-utils-android
: Дополнительные утилиты (KTX loader, математические типы данных и т. д.)gltfio-android
: Библиотека для загрузки glTF Filament (AAR) для Androidsamples
: Примеры для Filament, специфические для Androidart
: Источник для различных произведений искусства (логотипы, PDF-руководства и т. д.)assets
: 3D-активы для использования с примерами приложенийbuild
: Скрипты сборки CMakedocs
: Документация
math
: Mathematica-ноутбуки для исследования BRDF, уравнений и т. д.filament
: Ядро Filament (минимальные зависимости)
backend
: Бэкенды рендеринга/драйверы (Vulkan, Metal, OpenGL/ES)ide
: Файлы конфигурации для IDE (CLion и т. д.)ios
: Примеры проектов для iOSlibs
: Библиотеки
bluegl
: Биндинги OpenGL для macOS, Linux и Windowsbluevk
: Биндинги Vulkan для macOS, Linux, Windows и Androidcamutils
: Утилиты для манипуляции камеройfilabridge
: Библиотека, используемая Filament engine и утилитами хостаfilaflat
: Библиотека сериализации/десериализации для материаловfilagui
: Помощник библиотеки для Dear ImGuicom/ocornut/imgui)
filamat
: Библиотека для генерации материаловfilamentapp
: Шаблон SDL2 для создания примеров приложенийfilameshio
: Маленькая библиотека для парсинга filamesh (см. также tools/filamesh
)geometry
: Утилиты, связанные с сеткойgltfio
: Загрузчик для glTF 2.0ibl
: Утилиты для генерации IBLimage
: Фильтрация изображений и простые трансформацииimageio
: Чтение/запись файлов изображений, предназначенное только для внутреннего использованияmatdbg
: DebugServer для анализа шейдеров в режиме реального времени (только для отладочных сборок)math
: Математическая библиотекаmathio
: Поддержка математических типов данных для выходных потоковutils
: Утилитная библиотека (потоки, память, структуры данных и т. д.)viewer
: Библиотека для просмотра glTF (требуется gltfio)samples
: Примеры десктопных приложенийshaders
: Шейдеры, используемые в filamat
и matc
third_party
: Внешние библиотеки и активы
environments
: Окружения-карты, лицензированные под CC0, которые можно использовать с cmgen
models
: Модели под лицензиями с открытым доступомtextures
: Текстуры, лицензированные под CC0tools
: Инструменты для хоста
cmgen
: Генератор активов на основе изображенийfilamesh
: Конвертер сеток - glslminifier
: Сжатие исходного кода GLSLmatc
: Компилятор материаловmatinfo
: Отображает информацию о материалах, скомпилированных с помощью matc
mipgen
: Генерирует серию мип-уровней из исходного изображенияnormal-blending
: Инструмент для смешивания карт нормалейresgen
: Агрегирует двоичные блобы в встраиваемые ресурсыroughness-prefilter
: Предфильтрация карты шероховатости из карты нормалей для уменьшения алиасингаspecular-color
: Вычисляет цвет спекуляции проводников на основе спектральных данныхweb
: JavaScript-биндинги, документация и примерыЭто не официально поддерживаемый продукт Google.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )