filament专注于渲染,场景管理比较简单。一般场景管理中的空间管理、碰撞检测、LOD、GUI,filament中都没有。
1.场景(Scene)
场景(Scene)是渲染物体和光源等的容器,可以增加和删除对象。
场景(Scene)创建和销毁。
Engine* engine = Engine::create();
Scene* scene = engine->createScene();
engine->destroy(&scene);
2.天空盒(SkyBox)
天空盒(SkyBox)用一个完整的空间来包围整个场景(Scene)。目前仅支持基于纹理(立方体贴图)的天空盒。
天空盒(SkyBox)创建和销毁。
filament::Engine* engine = filament::Engine::create();
filament::IndirectLight* skybox = filament::Skybox::Builder().environment(cubemap).build(*engine);
engine->destroy(skybox);
3.包围盒(Box)
轴向3D包围盒定义了中心和半范围。
/** Center of the 3D box */
math::float3 center = {};
/** Half extent from the center on all 3 axis */
math::float3 halfExtent = {};
4.间接光照(IndirectLight)
间接光照(IndirectLight)用于模拟环境光。环境中高动态范围图像,并用工具cmgen处理以获取需要的间接光照。目前的间接光照局限于表示来自无穷远处的全局照明。
间接光照(IndirectLight)创建和销毁。
filament::Engine* engine = filament::Engine::create();
filament::IndirectLight* environment = filament::IndirectLight::Builder()
.reflections(cubemap)
.irradiance(numBands, sphericalHarmonicsCoefficients)
.build(*engine);
engine->destroy(environment);
5.相机(Camera)
相机(Camera)包含观察场景的位置和方向,也控制投影和曝光参数。
相机(Camera)创建和销毁。
filament::Engine* engine = filament::Engine::create();
filament::Camera* myCamera = engine->createCamera();
myCamera->setProjection(45, 16.0/9.0, 0.1, 1.0);
myCamera->lookAt({0, 1.60, 1}, {0, 0, 0});
engine->destroy(myCamera)
6.光源(Light)
场景中光源的类型
- 方向光源(directional lights)
- 点光源 (point lights)
- 聚光灯(spot lights)
光源(Light)创建和销毁。
filament::Engine* engine = filament::Engine::create();
utils::Entity sun = utils::EntityManager.get().create();
filament::LightManager::Builder(Type::SUN).castShadows(true).build(*engine, sun);
engine->getLightManager().destroy(sun);
7.视图(View)
视图(View)包含渲染场景所需的状态信息。如:场景(Scene)、相机(Camera)、视口(Viewport)、渲染参数(rendering parameters)。 view对象较大,占用内存较多,所以不建议使用过多的view对象。涉及技术:
- 多重采样抗锯齿(MSAA ,MultiSampling Anti-Aliasing)
- 阴影贴图(shadow mapping)
- 动态分辨率(dynamic resolution)
- 渲染质量等级(QualityLevel)
- 色调映射和伽马编码(Tone-mapping & gamma encoding)
- 抖动显示(Dithering)
- 快速近似抗锯齿(FXAA,Fast Approximate Anti-Aliasing)