20 #pragma warning(disable : 4068 4146 4293 4305)
23 #include <filament/LightManager.h>
24 #include <filament/RenderableManager.h>
25 #include <utils/Entity.h>
31 #include <Eigen/Geometry>
35 #include <unordered_map>
54 class TransformManager;
60 namespace visualization {
64 class GeometryBuffersBuilder;
72 using Transform = Eigen::Transform<float, 3, Eigen::Affine>;
93 void AddCamera(
const std::string& camera_name,
94 std::shared_ptr<Camera> cam)
override;
95 void RemoveCamera(
const std::string& camera_name)
override;
102 const std::string& downsampled_name =
"",
103 size_t downsample_threshold = SIZE_MAX)
override;
107 const std::string& downsampled_name =
"",
108 size_t downsample_threshold = SIZE_MAX)
override;
111 bool HasGeometry(
const std::string& object_name)
const override;
116 void ShowGeometry(
const std::string& object_name,
bool show)
override;
122 const std::string& object_name)
override;
125 bool receive_shadows)
override;
127 bool enable)
override;
129 uint8_t priority)
override;
134 void QueryGeometry(std::vector<std::string>& geometry)
override;
138 bool shader_only =
true)
override;
142 const Eigen::Vector3f&
color,
146 bool cast_shadows)
override;
148 const Eigen::Vector3f&
color,
150 const Eigen::Vector3f& direction,
153 float inner_cone_angle,
154 float outer_cone_angle,
155 bool cast_shadows)
override;
157 const Eigen::Vector3f&
color,
158 const Eigen::Vector3f& direction,
160 bool cast_shadows)
override;
162 void RemoveLight(
const std::string& light_name)
override;
164 const Light& light)
override;
166 const Eigen::Vector3f&
color)
override;
168 const Eigen::Vector3f&
position)
override;
170 const Eigen::Vector3f& direction)
override;
172 float intensity)
override;
174 float falloff)
override;
176 float inner_cone_angle,
177 float outer_cone_angle)
override;
179 bool cast_shadows)
override;
182 const Eigen::Vector3f&
color,
183 float intensity)
override;
206 const Eigen::Vector4f&
color,
207 const std::shared_ptr<geometry::Image>
image =
nullptr)
override;
212 void RenderToImage(std::function<
void(std::shared_ptr<geometry::Image>)>
215 std::function<
void(std::shared_ptr<geometry::Image>)>
callback)
234 void Draw(filament::Renderer& renderer);
246 void MarkGeometryChanged();
249 filament::RenderableManager::Builder& builder,
251 enum BufferReuse { kNo, kYes };
252 bool CreateAndAddFilamentEntity(
253 const std::string& object_name,
254 GeometryBuffersBuilder& buffer_builder,
258 const MaterialRecord& material,
259 BufferReuse reusing_vertex_buffer = BufferReuse::kNo);
261 filament::Engine& engine_;
262 FilamentResourceManager& resource_mgr_;
263 filament::Scene* scene_ =
nullptr;
285 struct GeometryMaterialInstance {
287 MaterialRecord properties;
291 struct RenderableGeometry {
294 bool was_hidden_before_picking =
false;
295 bool cast_shadows =
true;
296 bool receive_shadows =
true;
297 bool culling_enabled =
true;
300 GeometryMaterialInstance mat;
303 geometry::AxisAlignedBoundingBox aabb;
312 utils::Entity filament_entity;
313 filament::RenderableManager::PrimitiveType primitive_type;
316 void ReleaseResources(filament::Engine& engine,
317 FilamentResourceManager& manager);
322 utils::Entity filament_entity;
326 struct ViewContainer {
327 std::unique_ptr<FilamentView> view;
328 bool is_active =
true;
329 int render_count = -1;
331 std::unordered_map<REHandle_abstract, ViewContainer> views_;
333 std::vector<RenderableGeometry*> GetGeometry(
const std::string& object_name,
334 bool warn_if_not_found =
true);
335 bool GeometryIsModel(
const std::string& object_name)
const;
336 LightEntity* GetLightInternal(
const std::string& light_name,
337 bool warn_if_not_found =
true);
338 void OverrideMaterialInternal(RenderableGeometry* geom,
339 const MaterialRecord& material,
340 bool shader_only =
false);
341 void UpdateMaterialProperties(RenderableGeometry& geom);
342 void UpdateDefaultLit(GeometryMaterialInstance& geom_mi);
343 void UpdateDefaultLitSSR(GeometryMaterialInstance& geom_mi);
344 void UpdateDefaultUnlit(GeometryMaterialInstance& geom_mi);
345 void UpdateNormalShader(GeometryMaterialInstance& geom_mi);
346 void UpdateDepthShader(GeometryMaterialInstance& geom_mi);
347 void UpdateDepthValueShader(GeometryMaterialInstance& geom_mi);
348 void UpdateGradientShader(GeometryMaterialInstance& geom_mi);
349 void UpdateSolidColorShader(GeometryMaterialInstance& geom_mi);
350 void UpdateBackgroundShader(GeometryMaterialInstance& geom_mi);
351 void UpdateGroundPlaneShader(GeometryMaterialInstance& geom_mi);
352 void UpdateLineShader(GeometryMaterialInstance& geom_mi);
353 void UpdateUnlitPolygonOffsetShader(GeometryMaterialInstance& geom_mi);
354 utils::EntityInstance<filament::TransformManager>
355 GetGeometryTransformInstance(RenderableGeometry* geom);
356 void CreateSunDirectionalLight();
357 void CreateBackgroundGeometry();
358 void CreateGroundPlaneGeometry();
360 std::unordered_map<std::string, RenderableGeometry> geometries_;
361 std::unordered_map<std::string, LightEntity> lights_;
362 std::unordered_map<std::string, std::vector<std::string>> model_geometries_;
364 Eigen::Vector4f background_color_;
365 std::shared_ptr<geometry::Image> background_image_;
366 std::string ibl_name_;
367 bool ibl_enabled_ =
false;
368 bool skybox_enabled_ =
false;
369 std::weak_ptr<filament::IndirectLight> indirect_light_;
370 std::weak_ptr<filament::Skybox> skybox_;
375 std::unordered_map<std::string, GaussianSplatPackedAttrs>
376 per_object_gs_attrs_;
379 std::unique_ptr<GaussianSplatPackedAttrs> merged_gs_attrs_;
382 void CacheGaussianSplatData(
const std::string&
name,
383 const t::geometry::PointCloud& cloud,
384 const MaterialRecord& material);
387 void RebuildMergedGaussianData();
std::shared_ptr< core::Tensor > image
Definition: FilamentRenderer.cpp:302
std::function< void(std::shared_ptr< core::Tensor >)> callback
Definition: FilamentRenderer.cpp:301
math::float4 color
Definition: LineSetBuffers.cpp:45
math::float3 position
Definition: LineSetBuffers.cpp:43
std::vector< UVAtlasVertex > vb
Definition: UVUnwrapping.cpp:27
std::vector< uint8_t > ib
Definition: UVUnwrapping.cpp:29
A bounding box that is aligned along the coordinate axes and defined by the min_bound and max_bound.
Definition: BoundingVolume.h:285
The base geometry class for 3D geometries.
Definition: Geometry3D.h:29
The base geometry class.
Definition: Geometry.h:23
A point cloud contains a list of 3D points.
Definition: PointCloud.h:81
Definition: FilamentResourceManager.h:50
static const TextureHandle kDefaultNormalMap
Definition: FilamentResourceManager.h:71
static const TextureHandle kDefaultTexture
Definition: FilamentResourceManager.h:69
Definition: FilamentScene.h:70
void UpdateLightDirection(const std::string &light_name, const Eigen::Vector3f &direction) override
Definition: FilamentScene.cpp:1917
Eigen::Vector3f GetSunLightColor() override
Definition: FilamentScene.cpp:2038
void UpdateLightIntensity(const std::string &light_name, float intensity) override
Definition: FilamentScene.cpp:1929
const std::string & GetIndirectLight() override
Definition: FilamentScene.cpp:2125
void EnableIndirectLight(bool enable) override
Definition: FilamentScene.cpp:2127
~FilamentScene()
Definition: FilamentScene.cpp:251
void SetActiveCamera(const std::string &camera_name) override
Definition: FilamentScene.cpp:635
void SetSunLightColor(const Eigen::Vector3f &color) override
Definition: FilamentScene.cpp:2031
void RenderToDepthImage(std::function< void(std::shared_ptr< geometry::Image >)> callback) override
Size of image is the size of the window.
Definition: FilamentScene.cpp:2358
void SetGeometryTransform(const std::string &object_name, const Transform &transform) override
Definition: FilamentScene.cpp:1195
Eigen::Vector3f GetSunLightDirection() override
Definition: FilamentScene.cpp:2074
bool AddPointLight(const std::string &light_name, const Eigen::Vector3f &color, const Eigen::Vector3f &position, float intensity, float falloff, bool cast_shadows) override
Definition: FilamentScene.cpp:1759
void SetSunLightDirection(const Eigen::Vector3f &direction) override
Definition: FilamentScene.cpp:2046
void Draw(filament::Renderer &renderer)
Definition: FilamentScene.cpp:2445
void HideRefractedMaterials(bool hide=true)
Definition: FilamentScene.cpp:2461
void RenderToImage(std::function< void(std::shared_ptr< geometry::Image >)> callback) override
Size of image is the size of the window.
Definition: FilamentScene.cpp:2352
void EnableSunLight(bool enable) override
Definition: FilamentScene.cpp:1999
void SetBackground(const Eigen::Vector4f &color, const std::shared_ptr< geometry::Image > image=nullptr) override
Definition: FilamentScene.cpp:2218
void UpdateLightColor(const std::string &light_name, const Eigen::Vector3f &color) override
Definition: FilamentScene.cpp:1892
Transform GetIndirectLightRotation() override
Definition: FilamentScene.cpp:2160
void EnableLightShadow(const std::string &light_name, bool cast_shadows) override
Definition: FilamentScene.cpp:1957
bool AddDirectionalLight(const std::string &light_name, const Eigen::Vector3f &color, const Eigen::Vector3f &direction, float intensity, bool cast_shadows) override
Definition: FilamentScene.cpp:1837
void SetSunLightIntensity(float intensity) override
Definition: FilamentScene.cpp:2017
geometry::AxisAlignedBoundingBox GetGeometryBoundingBox(const std::string &object_name) override
Definition: FilamentScene.cpp:1230
void UpdateLightPosition(const std::string &light_name, const Eigen::Vector3f &position) override
Definition: FilamentScene.cpp:1903
TextureHandle GetColorBufferForView(const FilamentView &view) const
Definition: FilamentScene.cpp:438
Transform GetGeometryTransform(const std::string &object_name) override
Definition: FilamentScene.cpp:1215
bool HasNonGaussianVisibleGeometry() const
Definition: FilamentScene.cpp:409
void ForEachActiveView(const std::function< void(FilamentView &)> &callback)
Definition: FilamentScene.cpp:380
void RemoveGeometry(const std::string &object_name) override
Definition: FilamentScene.cpp:1091
bool HasGaussianSplatGeometry() const
Definition: FilamentScene.cpp:400
bool SetIndirectLight(const std::string &ibl_name) override
Definition: FilamentScene.cpp:2082
void SetGroundPlaneColor(const Eigen::Vector4f &color) override
Definition: FilamentScene.cpp:2326
bool GeometryIsVisible(const std::string &object_name) override
Definition: FilamentScene.cpp:1164
Light & GetLight(const std::string &light_name) override
Definition: FilamentScene.cpp:1872
void SetIndirectLightIntensity(float intensity) override
Definition: FilamentScene.cpp:2140
ViewHandle AddView(std::int32_t x, std::int32_t y, std::uint32_t w, std::uint32_t h) override
Definition: FilamentScene.cpp:352
void SetSunAngularRadius(float radius) override
Definition: FilamentScene.cpp:2053
void ForEachView(const std::function< void(FilamentView &)> &callback) const
Iterate over ALL views (including inactive/cached ones).
Definition: FilamentScene.cpp:391
float GetSunLightIntensity() override
Definition: FilamentScene.cpp:2024
void UpdateLightFalloff(const std::string &light_name, float falloff) override
Definition: FilamentScene.cpp:1940
void EnableSunLightShadows(bool enable) override
Definition: FilamentScene.cpp:2010
void RemoveView(const ViewHandle &view_id) override
Definition: FilamentScene.cpp:626
const GaussianSplatPackedAttrs * GetGaussianSplatPackedAttrs() const
Definition: FilamentScene.cpp:459
bool UsesGaussianSplatOutput(const FilamentView &view) const
Definition: FilamentScene.cpp:421
bool GetSkyboxVisible() const override
Definition: FilamentScene.cpp:2184
View * GetView(const ViewHandle &view_id) const override
Definition: FilamentScene.cpp:371
void OverrideMaterialAll(const MaterialRecord &material, bool shader_only=true) override
Definition: FilamentScene.cpp:1744
void SetRenderOnce(const ViewHandle &view_id) override
Definition: FilamentScene.cpp:618
Scene * Copy() override
Definition: FilamentScene.cpp:291
void AddCamera(const std::string &camera_name, std::shared_ptr< Camera > cam) override
Definition: FilamentScene.cpp:630
void SetGeometryCulling(const std::string &object_name, bool enable) override
Definition: FilamentScene.cpp:1277
void EnableGroundPlane(bool enable, GroundPlane plane) override
Definition: FilamentScene.cpp:2307
void SetSunHaloSize(float size) override
Definition: FilamentScene.cpp:2060
filament::Scene * GetNativeScene() const
Definition: FilamentScene.h:243
std::uint64_t GetGeometryChangeId() const
Definition: FilamentScene.cpp:236
void ShowSkybox(bool show) override
Definition: FilamentScene.cpp:2170
FilamentScene(filament::Engine &engine, FilamentResourceManager &resource_mgr, Renderer &renderer)
Definition: FilamentScene.cpp:240
bool AddGeometry(const std::string &object_name, const geometry::Geometry3D &geometry, const MaterialRecord &material, const std::string &downsampled_name="", size_t downsample_threshold=SIZE_MAX) override
Definition: FilamentScene.cpp:652
void UpdateGeometry(const std::string &object_name, const t::geometry::PointCloud &point_cloud, uint32_t update_flags) override
Definition: FilamentScene.cpp:936
void SetGeometryPriority(const std::string &object_name, uint8_t priority) override
Definition: FilamentScene.cpp:1295
void SetViewActive(const ViewHandle &view_id, bool is_active) override
Definition: FilamentScene.cpp:610
void ShowGeometry(const std::string &object_name, bool show) override
Definition: FilamentScene.cpp:1125
void RemoveLight(const std::string &light_name) override
Definition: FilamentScene.cpp:1883
void SetSunHaloFalloff(float falloff) override
Definition: FilamentScene.cpp:2067
void QueryGeometry(std::vector< std::string > &geometry) override
Definition: FilamentScene.cpp:1738
void SetSunLight(const Eigen::Vector3f &direction, const Eigen::Vector3f &color, float intensity) override
Definition: FilamentScene.cpp:1988
void SetIndirectLightRotation(const Transform &rotation) override
Definition: FilamentScene.cpp:2153
float GetIndirectLightIntensity() override
Definition: FilamentScene.cpp:2146
void GeometryShadows(const std::string &object_name, bool cast_shadows, bool receive_shadows) override
Definition: FilamentScene.cpp:1258
Eigen::Transform< float, 3, Eigen::Affine > Transform
Definition: FilamentScene.h:72
void UpdateLightConeAngles(const std::string &light_name, float inner_cone_angle, float outer_cone_angle) override
Definition: FilamentScene.cpp:1951
void RemoveCamera(const std::string &camera_name) override
Definition: FilamentScene.cpp:633
bool HasGeometry(const std::string &object_name) const override
Definition: FilamentScene.cpp:928
void UpdateLight(const std::string &light_name, const Light &light) override
Definition: FilamentScene.cpp:1878
TextureHandle GetDepthBufferForView(const FilamentView &view) const
Definition: FilamentScene.cpp:445
void OverrideMaterial(const std::string &object_name, const MaterialRecord &material) override
Definition: FilamentScene.cpp:1698
void InvalidateGaussianSplatOutput(FilamentView &view)
Definition: FilamentScene.cpp:452
bool AddSpotLight(const std::string &light_name, const Eigen::Vector3f &color, const Eigen::Vector3f &position, const Eigen::Vector3f &direction, float intensity, float falloff, float inner_cone_angle, float outer_cone_angle, bool cast_shadows) override
Definition: FilamentScene.cpp:1795
Definition: FilamentView.h:33
Definition: Renderer.h:59
GroundPlane
Definition: Scene.h:187
Definition: FilamentEngine.h:15
const char const char value recording_handle imu_sample recording_handle uint8_t size_t data_size k4a_record_configuration_t config target_format k4a_capture_t capture_handle k4a_imu_sample_t imu_sample playback_handle k4a_logging_message_cb_t void min_level device_handle k4a_imu_sample_t timeout_in_ms capture_handle capture_handle capture_handle image_handle temperature_c k4a_image_t image_handle uint8_t image_handle image_handle image_handle image_handle uint32_t
Definition: K4aPlugin.cpp:548
const char const char value recording_handle imu_sample recording_handle uint8_t size_t data_size k4a_record_configuration_t config target_format k4a_capture_t capture_handle k4a_imu_sample_t imu_sample uint64_t
Definition: K4aPlugin.cpp:343
const char const char value recording_handle imu_sample recording_handle uint8_t size_t data_size k4a_record_configuration_t config target_format k4a_capture_t capture_handle k4a_imu_sample_t imu_sample playback_handle k4a_logging_message_cb_t void min_level device_handle k4a_imu_sample_t int32_t
Definition: K4aPlugin.cpp:395
REHandle< EntityType::IndexBuffer > IndexBufferHandle
Definition: RendererHandle.h:139
REHandle< EntityType::VertexBuffer > VertexBufferHandle
Definition: RendererHandle.h:138
REHandle< EntityType::MaterialInstance > MaterialInstanceHandle
Definition: RendererHandle.h:135
REHandle< EntityType::Skybox > SkyboxHandle
Definition: RendererHandle.h:132
REHandle< EntityType::IndirectLight > IndirectLightHandle
Definition: RendererHandle.h:131
Definition: PinholeCameraIntrinsic.cpp:16
Definition: GaussianSplatDataPacking.h:122
Definition: MaterialRecord.h:22