1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors_trending-filament

Клонировать/Скачать
BUILDING.md 25 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 17.06.2025 00:11 b314bfe

Сборка Filament

Необходимые условия

Чтобы собрать Filament, вам необходимо сначала установить следующие инструменты:

  • CMake 3.19 (или более поздняя версия)
  • clang 14.0 (или более поздняя версия)
  • ninja 1.10 (или более поздняя версия)

Дополнительные зависимости могут потребоваться для вашей операционной системы. Пожалуйста, обратитесь к соответствующему разделу ниже.

Чтобы собрать Filament для Android, вам также необходимо установить следующее:

  • Android Studio Flamingo или более поздняя версия
  • Android SDK
  • Android NDK 25.1 или более поздняя версия
  • Java 17

Переменные окружения

Чтобы собрать Filament для Android, убедитесь, что переменная окружения ANDROID_HOME указывает на расположение вашего Android SDK.

При сборке для WebGL вам также потребуется установить EMSDK. См. WebAssembly.

IDE

Мы рекомендуем использовать CLion для разработки Filament. Просто откройте файл CMakeLists.txt корневого каталога в CLion, чтобы получить рабочий проект.

Легкая сборка

После установки необходимых зависимостей для вашей операционной системы, вы можете использовать скрипт, расположенный в build.sh, чтобы легко собрать Filament на macOS и Linux.

Этот скрипт можно запустить из любого места, и он будет создавать сборочные артефакты в директории out/ внутри дерева исходного кода Filament.Чтобы запустить ускоренную отладочную сборку:

./build.sh debug

Чтобы запустить ускоренную релизную сборку:

./build.sh release

Чтобы запустить как ускоренную отладочную, так и релизную сборки:

./build.sh debug release

Если сборка не удалась по каким-либо причинам, она может оставить директорию out/ в нерабочем состоянии. Вы можете принудительно выполнить чистую сборку, добавив флаг -c в этом случае.

Чтобы установить библиотеки и исполняемые файлы в out/debug/ и out/release/, добавьте флаг -i. Скрипт предлагает больше функций, описанных выполнением build.sh -h.

Специфические для Filament опции CMake

Следующие опции CMake являются булевыми опциями, специфичными для Filament:

  • FILAMENT_ENABLE_LTO: Включить оптимизацию времени связи, если это поддерживается компилятором
  • FILAMENT_BUILD_FILAMAT: Собрать filamat и JNI сборки
  • FILAMENT_SUPPORTS_OPENGL: Включить бэкенд OpenGL
  • FILAMENT_SUPPORTS_METAL: Включить бэкенд Metal
  • FILAMENT_SUPPORTS_VULKAN: Включить бэкенд Vulkan
  • FILAMENT_INSTALL_BACKEND_TEST: Установить библиотеку тестирования бэкенда, чтобы она могла использоваться на iOS
  • FILAMENT_USE_EXTERNAL_GLES3: Экспериментальная: Скомпилировать Filament против OpenGL ES 3
  • FILAMENT_SKIP_SAMPLES: Не собирать образцы приложений

Чтобы включить или отключить опцию:

cd <cmake-build-directory>
cmake . -DOPTION=ON       # Замените OPTION на имя опции, установите ON / OFF
```Опции также могут быть установлены с помощью графического интерфейса CMake.

### Linux

Убедитесь, что у вас установлены следующие зависимости:

- `clang-14` или более поздняя версия
- `libglu1-mesa-dev`
- `libc++-14-dev` (`libcxx-devel` и `libcxx-static` на Fedora) или более поздняя версия
- `libc++abi-14-dev` (`libcxxabi-static` на Fedora) или более поздняя версия
- `ninja-build`
- `libxi-dev`
- `libxcomposite-dev` (`libXcomposite-devel` на Fedora)
- `libxxf86vm-dev` (`libXxf86vm-devel` на Fedora)

```shell
sudo apt install clang-14 libglu1-mesa-dev libc++-14-dev libc++abi-14-dev ninja-build libxi-dev libxcomposite-dev libxxf86vm-dev -y

После установки зависимостей мы настоятельно рекомендуем использовать скрипт быстрой сборки.

Если вы хотите запустить cmake напрямую, а не использовать скрипт сборки, его можно вызвать следующим образом, с некоторыми оговорками, которые объясняются ниже.

mkdir out/cmake-release
cd out/cmake-release
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../release/filament ../..

Ваша дистрибутив Linux может по умолчанию использовать gcc вместо clang. В этом случае вызов cmake следует выполнить следующей командой:

mkdir out/cmake-release
cd out/cmake-release
# Или используйте конкретную версию clang, например /usr/bin/clang-14
CC=/usr/bin/clang CXX=/usr/bin/clang++ CXXFLAGS=-stdlib=libc++ \
  cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../release/filament ../..

Вы также можете экспортировать переменные окружения CC и CXX, чтобы они всегда указывали на clang. Другим решением является использование update-alternatives, чтобы изменить стандартный компилятор и указать на конкретную версию clang:```shell update-alternatives --install /usr/bin/clang clang /usr/bin/clang-14 100 update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-14 100 update-alternatives --install /usr/bin/cc cc /usr/bin/clang 100 update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++ 100


Наконец, запустите `ninja`:

```shell
ninja

Это соберет Filament, его тесты и образцы, а также различные утилиты для хоста.

macOS

Чтобы скомпилировать Filament, вам необходимо установить последнюю версию Xcode и убедиться, что инструменты командной строки настроены, запустив:

xcode-select --install

Если вы хотите запустить бэкенд Vulkan вместо стандартного бэкенда Metal, вам необходимо установить LunarG SDK, включить "System Global Components" и перезагрузить вашу машину.

Затем запустите cmake и ninja для запуска сборки:

mkdir out/cmake-release
cd out/cmake-release
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../release/filament ../..
ninja

iOS

Наиболее простым способом сборки Filament для iOS является использование build.sh и флага -p ios. Например, чтобы собрать отладочную цель:

./build.sh -p ios debug

Дополнительная информация доступна в ios/samples/README.md.

Windows

Сборка на Windows с Visual Studio 2019 или более поздней версией

Установите следующие компоненты:

По умолчанию Windows рассматривает файловую систему как нечувствительную к регистру. Пожалуйста, не включайте чувствительность к регистру в вашем репозитории, так как это не соответствует ожиданиям CMake. Это можно проверить с помощью fsutil.exe file queryCaseSensitiveInfo.

Затем откройте x64 Native Tools Command Prompt for VS 2019, создайте рабочую директорию и запустите CMake в ней:

mkdir out
cd out
cmake ..

Откройте сгенерированный файл решения TNT.sln в Visual Studio.

Чтобы собрать все цели, выполните Сборка решения из меню Сборка. В качестве альтернативы, щелкните правой кнопкой мыши на цели в Solution Explorer и выберите Сборка для сборки конкретной цели.

Например, соберите образец material_sandbox и запустите его из директории out с помощью:

samples\Debug\material_sandbox.exe ..\assets\models\monkey\monkey.obj

Вы также можете использовать CMake для запуска сборки без открытия Visual Studio. Например, из директории out выполните следующую команду.

cmake --build . --target gltf_viewer --config Release

Android Перед сборкой Filament для Android убедитесь, что вы собрали Filament для вашего хоста. Некоторые из инструментов хоста необходимы для успешной сборки для Android.

Filament может быть собран для следующих архитектур:

  • ARM 64-bit (arm64-v8a)
  • ARM 32-bit (armeabi-v7a)
  • Intel 64-bit (x86_64)
  • Intel 32-bit (x86)Обратите внимание, что основная цель — это архитектура ARM 64-бит. Наша реализация оптимизирована в первую очередь для arm64-v8a.

Чтобы собрать Android на Windows-машинах, см. android/Windows.md.

Легкая сборка для Android

Легкий способ сборки Filament для Android — использовать build.sh и флаг -p android. Например, чтобы собрать целевой объект release:

./build.sh -p android release

Вызовите build.sh -h для получения дополнительной информации.

Ручная сборка

Вызовите CMake в директории сборки по вашему выбору, внутри директории filament. Команды ниже показывают, как собрать Filament для ARM 64-бит (aarch64).

mkdir out/android-build-release-aarch64
cd out/android-build-release-aarch64
cmake -G Ninja -DCMAKE_TOOLCHAIN_FILE=../../build/toolchain-aarch64-linux-android.cmake \
      -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../android-release/filament ../..

Затем вызовите ninja:

ninja install

или

ninja install/strip

Это сгенерирует Android-бинарники Filament в out/android-release. Это местоположение важно для сборки проектов Android Studio, расположенных в filament/android. После установки библиотечные бинарники должны быть найдены в out/android-release/filament/lib/arm64-v8a.

AAR

Перед попыткой сборки AAR убедитесь, что вы скомпилировали и установили native библиотеки, как описано в разделах выше. Вы должны иметь следующие ABI, собранные в out/android-release/filament/lib/:

  • arm64-v8a
  • armeabi-v7a
  • x86_64
  • x86

Чтобы собрать AAR Filament, просто открыть проект Android Studio в android/. AAR — это универсальный AAR, содержащий все поддерживаемые целевые объекты сборки:- arm64-v8a

  • armeabi-v7a
  • x86_64
  • x86

Чтобы исключить ненужные ABI, полагайтесь на abiFilters проекта, который ссылается на AAR Filament.

В качестве альтернативы вы можете собрать AAR из командной строки, выполнив следующее в директории android/:```shell ./gradlew -Pcom.google.android.filament.dist-dir=../../out/android-release/filament assembleRelease


Параметр `-Pcom.google.android.filament.dist-dir` можно использовать для указания другого каталога установки (он должен соответствовать префиксу установки CMake, использованному в предыдущих шагах).

#### Использование AAR Filament

Создайте новый модуль в вашем проекте и выберите _Импорт .JAR или .AAR пакета_ при запросе. Убедитесь, что добавили только что созданный модуль как зависимость к вашему приложению.

Если вы не хотите включать все поддерживаемые ABIs, убедитесь, что создали соответствующие вкусы в вашем файле сборки Gradle. Например:

```gradle
flavorDimensions 'cpuArch'
productFlavors {
    arm8 {
        dimension 'cpuArch'
        ndk {
            abiFilters 'arm64-v8a'
        }
    }
    arm7 {
        dimension 'cpuArch'
        ndk {
            abiFilters 'armeabi-v7a'
        }
    }
    x86_64 {
        dimension 'cpuArch'
        ndk {
            abiFilters 'x86_64'
        }
    }
    x86 {
        dimension 'cpuArch'
        ndk {
            abiFilters 'x86'
        }
    }
    universal {
        dimension 'cpuArch'
    }
}

WebAssembly

Основная библиотека Filament может быть перекомпилирована в WebAssembly с macOS или Linux. Чтобы начать, следуйте инструкциям по сборке Filament на вашей платформе (macOS или linux), что обеспечит наличие необходимых зависимостей.Затем вам нужно установить Emscripten SDK. Следующие инструкции показывают, как установить ту же версию, что и наша непрерывная сборка.

cd <ваш выбранный родительский каталог для Emscripten SDK>
curl -L https://github.com/emscripten-core/emsdk/archive/refs/tags/3.1.60.zip > emsdk.zip
unzip emsdk.zip ; mv emsdk-* emsdk ; cd emsdk
python ./emsdk.py install latest
python ./emsdk.py activate latest
source ./emsdk_env.sh

В качестве альтернативы вы можете попробовать запустить скрипт build/common/get-emscripten.sh.

После этого вы можете вызвать скрипт easy build следующим образом:

export EMSDK=<ваш выбранный каталог для Emscripten SDK>
./build.sh -p webgl release

Переменная EMSDK обязательна, чтобы скрипт сборки мог найти Emscripten SDK. Сборка создает папку samples, которая может быть использована как корневая папка для простого статического веб-сервера. Обратите внимание, что вы не можете открыть HTML напрямую из файловой системы из-за CORS. Мы рекомендуем использовать инструмент emrun для создания быстрого локального сервера localhost:

emrun out/cmake-webgl-release/web/samples --no_browser --port 8000

Вы можете открыть http://localhost:8000/suzanne.html в своем веб-браузере.

В качестве альтернативы, если у вас установлена Node.js, вы можете использовать пакет live-server, который автоматически обновляет веб-страницу при обнаружении изменений.

Каждое приложение-пример имеет свой собственный вручную написанный HTML-файл. Дополнительно, папка сервера содержит ресурсы, такие как меши, текстуры и материалы.## Запуск локальных примеров

Папка samples/ содержит несколько примеров использования Filament с SDL2.

Некоторые примеры принимают FBX/OBJ меши, в то время как другие зависят от формата файла filamesh. Чтобы сгенерировать файл filamesh из FBX/OBJ активов, запустите инструмент filamesh (./tools/filamesh/filamesh в вашей папке сборки):

filamesh ./assets/models/monkey/monkey.obj monkey.filamesh

Большинство примеров принимают IBL, который должен быть сгенерирован с помощью инструмента cmgen (./tools/filamesh/cmgen в вашей папке сборки). Эти приложения-примеры ожидают путь к папке, содержащей файлы .rgb32f для IBL (которые являются PNG-файлами, содержащими данные R11F_G11F_B10F) или путь к папке, содержащей два файла .ktx (один для IBL, один для кубической оболочки). Чтобы сгенерировать IBL, просто используйте следующую команду:

cmgen -f ktx -x ./ibls/ my_ibl.exr

Исходная карта окружения может быть PNG (8 или 16 бит), PSD (16 или 32 бит), HDR или файл OpenEXR. Карта окружения может быть равносторонней проекцией, горизонтальным крестом, вертикальным крестом или списком граней кубической карты (горизонтальным или вертикальным).cmgen автоматически создает папку на основе имени исходной карты окружения. В приведенном выше примере, конечная папка будет ./ibls/my_ibl/. Эта папка должна содержать предфильтрованную карту окружения (один файл на каждую грань кубической карты и каждый уровень мип-карты), текстуру карты окружения для кубической оболочки и текстовый файл, содержащий гармонические уровни для диффузного отражения света.Если вы предпочитаете размытое фоновое изображение, запустите cmgen с этим флагом: --extract-blur=0.1. Числовое значение представляет желаемую степень шероховатости от 0 до 1.

Генерация документации на C++

Чтобы сгенерировать документацию, вам сначала нужно установить doxygen и graphviz, затем выполните следующие команды:

cd filament/filament
doxygen docs/doxygen/filament.doxygen

Наконец, просто откройте docs/html/index.html в вашем веб-браузере.

ПО-уровенная растризация

Мы протестировали swiftshader и Mesa для ПО-уровенной растризации на backend'ах Vulkan/GL.

Чтобы использовать это для Vulkan, убедитесь сначала, что SDK Vulkan установлен на вашем компьютере. Если вы выполняете ручную установку SDK на Linux, вам нужно будет запустить setup-env.sh в корневом каталоге SDK, чтобы убедиться, что загрузчик Vulkan является первой библиотекой, загруженной.

Swiftshader (Vulkan) [тестировано на macOS и Linux]

Сначала соберите SwiftShader

git clone https://github.com/google/swiftshader.git
cd swiftshader/build
cmake .. && make -j

и затем установите VK_ICD_FILENAMES на ICD json, сгенерированный в процессе сборки. Например,

export VK_ICD_FILENAMES=/Users/user/swiftshader/build/Darwin/vk_swiftshader_icd.json

Соберите и запустите Filament как обычно и укажите backend Vulkan при создании Engine.

Mesa's LLVMPipe (GL) и Lavapipe (Vulkan) [тестировано на Linux]Мы рассмотрим только шаги сборки Mesa из исходного кода. Официальная документация Mesa упоминает, что в общем предварительно скомпилированные библиотеки не предоставляются.Скачайте репозиторий и убедитесь, что у вас есть зависимости для сборки. Например (предполагая Ubuntu/Debian дистрибутив),

git clone https://gitlab.freedesktop.org/mesa/mesa.git
sudo apt-get build-dep mesa

Чтобы собрать как GL, так и Vulkan растризаторы,

cd mesa
mkdir -p out
meson setup builddir/ -Dprefix=$(pwd)/out -Dglx=xlib -Dgallium-drivers=swrast -Dvulkan-drivers=swrast
meson install -C builddir/

Для GL нам нужно убедиться, что мы загружаем библиотеку GL из каталога выходных данных mesa. Например, чтобы запустить отладочный gltf_viewer, мы бы выполнили

LD_LIBRARY_PATH=/пользователь/путь/к/каталогу/выходных/данных/mesa/out/lib/x86_64-linux-gnu \
    ./out/cmake-debug/samples/gltf_viewer -a opengl

Для Vulkan нам нужно установить путь к ICD json, который указывает загрузчику, где найти библиотеку драйвера. Чтобы запустить gltf_viewer, мы бы выполнили

VK_ICD_FILENAMES=/пользователь/путь/к/каталогу/выходных/данных/mesa/out/share/vulkan/icd.d/lvp_icd.x86_64.json \
    ./out/cmake-debug/samples/gltf_viewer -a vulkan

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors_trending-filament.git
git@api.gitlife.ru:oschina-mirror/mirrors_trending-filament.git
oschina-mirror
mirrors_trending-filament
mirrors_trending-filament
main