Files
filament/libs/iblprefilter
Mathias Agopian 5286dec70b Make sure that all descriptors are always initialized (#8739)
* Make sure that all descriptors are always initialized

* improvements to committing material instances

- from now on, only MaterialDomain::SURFACE material instances are
  automatically committed by FEngine at the beginning of a frame.
  COMPUTE and POST_PROCESS domains must be committed manually via
  a new API on MaterialInstance. Both domains are not public APIs so
  this shouldn't have an impact anywhere.


- DescriptorSet now validates that all descriptors are set and emits
  an error in the log if not.

- these changes prevent PostProcess material instances to be committed
  before all descriptors are set.

* Update filament/src/details/Engine.cpp

Co-authored-by: Powei Feng <powei@google.com>

---------

Co-authored-by: Powei Feng <powei@google.com>
2025-05-15 15:38:16 -07:00
..
2021-04-26 12:17:42 -07:00

IBL Prefilter

This library can be used to generate the reflections texture used by filament's IndirectLight class. It is similar to the cmgen tool except that all computations are performed on the GPU and are therefore significantly faster. cmgen however offers more functionalities.

IBL Prefilter is designed entirely as a client of filament, that is, it only uses filament public APIs.

Library and headers

The library is called libfilament-iblprefilter.a and its public headers can be found in <filament-iblprefilter/*.h>.

Performance

Expect a total processing time of about 100ms to 300ms for a 5-levels 256 x 256 cubemap with 1024 samples.

Example

#include <filament/Engine.h>
#include <filament-iblprefilter/IBLPrefilterContext.h>

using namespace filament;

Engine* engine = Engine::create();

// create an IBLPrefilterContext, keep it around if several cubemap will be processed.
IBLPrefilterContext context(engine);

// create the specular (reflections) filter. This operation generates the kernel, so it's important
// to keep it around if it will be reused for several cubemaps.
IBLPrefilterContext::SpecularFilter filter(context);

// launch the heaver computation. Expect 100-100ms on the GPU.
Texture* texture = filter(environment_cubemap);

IndirectLight* indirectLight = IndirectLight::Builder()
    .reflections(texture)
    .build(engine);