Spec-Zone.ru › Qt

Использование освещения на основе изображений

Введение

Qt Quick 3D поддерживает IBL (освещение на основе изображений) для освещения сцен или отдельных материалов.

IBL — это метод освещения, позволяющий освещать сцены с помощью изображений. Это особенно полезно при создании реалистичного освещения и отражений в помещениях и на открытом воздухе.

Вы можете использовать любой файл изображения для IBL, но рекомендуется использовать изображения HDR (высокой динамической гаммы) с углом обзора 360°. Изображения HDR обладают гораздо более высокой динамической гаммой, чем, например, изображения JPEG или PNG. Более высокая динамическая гамма обеспечивает более реалистичное освещение благодаря большому диапазону уровней яркости, от очень яркого до очень тёмного.

Следующий пример демонстрирует эффект освещения объекта с использованием изображения HDR по сравнению с одиночным направленным светом:

Источник света Материл гладкий диэлектрик Материл шероховатый диэлектрик Материл гладкий металл Материл шероховатый металл
Одиночный направленный свет

Освещение на основе изображения

Освещение сцены

Чтобы осветить сцену с помощью изображения, добавьте изображение как текстуру к свойству lightProbe.

lightProbe: Texture {
    source: "maps/OpenfootageNET_garage-1024.hdr"
}

После выбора изображения IBL настраивается для вашей сцены. Все модели в сцене по умолчанию освещаются зондом света.

Примечание: Вы также можете сочетать IBL с любым другим источником света, чтобы дополнить эффект освещения объекта.

Теперь, когда IBL настроен для вашей сцены, давайте рассмотрим различные свойства зонда. Во многих случаях значения по умолчанию обеспечивают удовлетворительный результат, но вы можете настроить следующие значения свойств в зависимости от изображения и желаемого результата:

  • Экспозиция Количество света, испускаемого зондом света.
  • Отсечка горизонта Увеличение значения добавляет темноту (чёрный цвет) в нижнюю половину среды, заставляя освещение исходить в основном сверху изображения (и удаляя конкретные отражения из нижней половины).
  • Ориентация Это свойство определяет ориентацию зонда света. Ориентация определяется в терминах углов Эйлера в градусах по осям x, y и z.
Свойство Металлический материал Диэлектрический материал
Значения по умолчанию

Экспозиция

Отсечка горизонта

Ориентация

Освещение материала

Чтобы использовать освещение на основе изображений только для одного материала вместо всей сцены или использовать отдельный зонд света для модели, уже освещённой освещением на основе изображений, установите изображение в качестве зонду света для материала.

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

Предварительное создание куба IBL

При использовании IBL приложение должно сгенерировать кубовую карту для изображения IBL. По умолчанию это происходит во время запуска приложения и может быть довольно медленным, особенно на встраиваемых и мобильных устройствах. Поэтому можно предварительно сгенерировать эту кубовую карту, используя Balsam. Просто запустите Balsam с файлом .hdr в качестве входных данных, и он выведет файл кубовой карты с тем же именем, что и входные данные, но с расширением файла ktx. Затем можно сослаться на этот файл в связанной с свойством lightProbe Texture, и Qt загрузит предварительно сгенерированную кубовую карту без дорогостоящей обработки во время выполнения.

Ручная выпечка

Например, предположим, что приложение использует изображение .hdr для своих зондов света или небосвода:

View3D {
    environment: SceneEnvironment {
        backgroundMode: SceneEnvironment.SkyBox
        lightProbe: Texture {
            source: "environment.hdr"
        }
        probeOrientation: Qt.vector3d(0, -90, 0)
    }
    // ...
}

Это полностью функционально, предполагая, что environment.hdr доступен во время выполнения. Однако загрузка изображения .hdr включает в себя дорогостоящую предподготовку. Этого можно избежать, выполнив:

balsam environment.hdr

Результат — новый файл environment.ktx. Распространение этого файла вместо файла .hdr значительно ускоряет время загрузки.

lightProbe: Texture {
    source: "environment.ktx"
}

Выпечка во время компиляции с помощью CMake

Ручное выполнение balsam для активов не всегда идеально. Поэтому рекомендуется, чтобы приложения полагались на CMake для автоматического выполнения этой задачи во время компиляции приложения.

Это делается с помощью функции CMake qt6_add_lightprobe_images, предоставленной компонентом Quick3D пакета Qt6:

...
find_package(Qt6 COMPONENTS Quick3D)
...
qt6_add_lightprobe_images(application_target "ibl_assets"
    PREFIX
        "/ibl"
    FILES
        "environment.hdr"
)

Замените application_target соответствующим значением. В данном случае нет необходимости вручную запускать balsam на environment.hdr, и файл .hdr не нужно распространять с приложением. Во время компиляции balsam будет вызываться автоматически, и environment.ktx будет добавлен в ресурсы приложения по адресу :/ibl/environment.ktx. Затем Texture зонда lightProbe должен ссылаться на этот файл.

lightProbe: Texture {
    source: "qrc:/ibl/environment.ktx"
}

Примечание: Установка PREFIX таким образом, что конечное имя в системе ресурсов имеет путь, соответствующий расположению файла .qml, позволяет использовать относительный путь к источнику вместо того, чтобы указывать абсолютный путь с помощью схемы qrc.

В дополнение к PREFIX также доступно ключевое слово BASE. Его поведение аналогично qt6_add_resources. Например, следующее приводит к генерации :/ibl/maps/environment.ktx:

qt6_add_lightprobe_images(application_target "ibl_assets"
    PREFIX
        "/ibl"
    BASE
        "../data/shared"
    FILES
        "../data/shared/maps/environment.hdr"
)

Как и в qt6_add_shaders, ключевое слово OUTPUTS позволяет указать полностью настраиваемое имя файла в системе ресурсов. Например, следующее также генерирует :/ibl/maps/environment.ktx:

qt6_add_lightprobe_images(application_target "ibl_assets"
    PREFIX
        "/ibl"
    FILES
        "../data/shared/maps/environment.hdr"
    OUTPUTS
        "maps/environment.ktx"
)

Примечание: Для каждой записи в списке FILES должна быть соответствующая запись в OUTPUTS.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/quick3d-asset-conditioning-ibl.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API