22 #pragma warning(disable : 4068 4146 4293 4305)
25 #include <filament/LightManager.h>
26 #include <filament/RenderableManager.h>
27 #include <utils/Entity.h>
33 #include <Eigen/Geometry>
34 #include <unordered_map>
52 class TransformManager;
58 namespace visualization {
62 class GeometryBuffersBuilder;
81 std::uint32_t h)
override;
89 void AddCamera(
const std::string& camera_name,
90 std::shared_ptr<Camera> cam)
override;
91 void RemoveCamera(
const std::string& camera_name)
override;
98 const std::string& downsampled_name =
"",
99 size_t downsample_threshold =
SIZE_MAX)
override;
103 const std::string& downsampled_name =
"",
104 size_t downsample_threshold =
SIZE_MAX)
override;
107 bool HasGeometry(
const std::string& object_name)
const override;
110 uint32_t update_flags)
override;
112 void ShowGeometry(
const std::string& object_name,
bool show)
override;
120 bool receive_shadows)
override;
122 bool enable)
override;
124 uint8_t priority)
override;
127 void QueryGeometry(std::vector<std::string>& geometry)
override;
130 bool shader_only =
true)
override;
134 const Eigen::Vector3f&
color,
138 bool cast_shadows)
override;
140 const Eigen::Vector3f&
color,
142 const Eigen::Vector3f& direction,
145 float inner_cone_angle,
146 float outer_cone_angle,
147 bool cast_shadows)
override;
149 const Eigen::Vector3f&
color,
150 const Eigen::Vector3f& direction,
152 bool cast_shadows)
override;
154 void RemoveLight(
const std::string& light_name)
override;
158 const Eigen::Vector3f&
color)
override;
160 const Eigen::Vector3f&
position)
override;
162 const Eigen::Vector3f& direction)
override;
164 float intensity)
override;
166 float falloff)
override;
168 float inner_cone_angle,
169 float outer_cone_angle)
override;
171 bool cast_shadows)
override;
174 const Eigen::Vector3f&
color,
175 float intensity)
override;
198 const Eigen::Vector4f&
color,
199 const std::shared_ptr<geometry::Image>
image =
nullptr)
override;
204 void RenderToImage(std::function<
void(std::shared_ptr<geometry::Image>)>
207 std::function<
void(std::shared_ptr<geometry::Image>)>
callback)
210 void Draw(filament::Renderer& renderer);
223 filament::RenderableManager::Builder& builder,
225 enum BufferReuse { kNo, kYes };
226 bool CreateAndAddFilamentEntity(
227 const std::string& object_name,
228 GeometryBuffersBuilder& buffer_builder,
232 const MaterialRecord& material,
233 BufferReuse reusing_vertex_buffer = BufferReuse::kNo);
235 filament::Engine& engine_;
236 FilamentResourceManager& resource_mgr_;
237 filament::Scene* scene_ =
nullptr;
258 struct GeometryMaterialInstance {
260 MaterialRecord properties;
264 struct RenderableGeometry {
267 bool was_hidden_before_picking =
false;
268 bool cast_shadows =
true;
269 bool receive_shadows =
true;
270 bool culling_enabled =
true;
273 GeometryMaterialInstance mat;
276 utils::Entity filament_entity;
277 filament::RenderableManager::PrimitiveType primitive_type;
280 void ReleaseResources(filament::Engine& engine,
281 FilamentResourceManager& manager);
286 utils::Entity filament_entity;
290 struct ViewContainer {
291 std::unique_ptr<FilamentView> view;
292 bool is_active =
true;
293 int render_count = -1;
295 std::unordered_map<REHandle_abstract, ViewContainer> views_;
297 std::vector<RenderableGeometry*> GetGeometry(
const std::string& object_name,
298 bool warn_if_not_found =
true);
299 bool GeometryIsModel(
const std::string& object_name)
const;
300 LightEntity* GetLightInternal(
const std::string& light_name,
301 bool warn_if_not_found =
true);
302 void OverrideMaterialInternal(RenderableGeometry* geom,
303 const MaterialRecord& material,
304 bool shader_only =
false);
305 void UpdateMaterialProperties(RenderableGeometry& geom);
306 void UpdateDefaultLit(GeometryMaterialInstance& geom_mi);
307 void UpdateGaussianSplat(GeometryMaterialInstance& geom_mi);
308 void UpdateDefaultLitSSR(GeometryMaterialInstance& geom_mi);
309 void UpdateDefaultUnlit(GeometryMaterialInstance& geom_mi);
310 void UpdateNormalShader(GeometryMaterialInstance& geom_mi);
311 void UpdateDepthShader(GeometryMaterialInstance& geom_mi);
312 void UpdateDepthValueShader(GeometryMaterialInstance& geom_mi);
313 void UpdateGradientShader(GeometryMaterialInstance& geom_mi);
314 void UpdateSolidColorShader(GeometryMaterialInstance& geom_mi);
315 void UpdateBackgroundShader(GeometryMaterialInstance& geom_mi);
316 void UpdateGroundPlaneShader(GeometryMaterialInstance& geom_mi);
317 void UpdateLineShader(GeometryMaterialInstance& geom_mi);
318 void UpdateUnlitPolygonOffsetShader(GeometryMaterialInstance& geom_mi);
319 utils::EntityInstance<filament::TransformManager>
320 GetGeometryTransformInstance(RenderableGeometry* geom);
321 void CreateSunDirectionalLight();
322 void CreateBackgroundGeometry();
323 void CreateGroundPlaneGeometry();
325 std::unordered_map<std::string, RenderableGeometry> geometries_;
326 std::unordered_map<std::string, LightEntity> lights_;
327 std::unordered_map<std::string, std::vector<std::string>> model_geometries_;
329 Eigen::Vector4f background_color_;
330 std::shared_ptr<geometry::Image> background_image_;
331 std::string ibl_name_;
332 bool ibl_enabled_ =
false;
333 bool skybox_enabled_ =
false;
334 std::weak_ptr<filament::IndirectLight> indirect_light_;
335 std::weak_ptr<filament::Skybox> skybox_;
std::shared_ptr< core::Tensor > image
std::function< void(std::shared_ptr< core::Tensor >)> callback
std::vector< UVAtlasVertex > vb
std::vector< uint8_t > ib
Hierarchical CLOUDVIEWER Object.
A point cloud contains a list of 3D points.
static const TextureHandle kDefaultNormalMap
static const TextureHandle kDefaultTexture
void HideRefractedMaterials(bool hide=true)
const std::string & GetIndirectLight() override
bool AddDirectionalLight(const std::string &light_name, const Eigen::Vector3f &color, const Eigen::Vector3f &direction, float intensity, bool cast_shadows) override
void EnableSunLight(bool enable) override
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
void SetIndirectLightIntensity(float intensity) override
Transform GetGeometryTransform(const std::string &object_name) override
void SetSunLightIntensity(float intensity) override
View * GetView(const ViewHandle &view_id) const override
void EnableGroundPlane(bool enable, GroundPlane plane) override
ViewHandle AddView(std::int32_t x, std::int32_t y, std::uint32_t w, std::uint32_t h) override
void OverrideMaterial(const std::string &object_name, const MaterialRecord &material) override
void SetRenderOnce(const ViewHandle &view_id) override
void RemoveGeometry(const std::string &object_name) override
void SetSunHaloFalloff(float falloff) override
void UpdateGeometry(const std::string &object_name, const t::geometry::PointCloud &point_cloud, uint32_t update_flags) override
void SetSunHaloSize(float size) override
void SetSunLight(const Eigen::Vector3f &direction, const Eigen::Vector3f &color, float intensity) override
void UpdateLightPosition(const std::string &light_name, const Eigen::Vector3f &position) override
bool GeometryIsVisible(const std::string &object_name) override
void RemoveCamera(const std::string &camera_name) override
void EnableLightShadow(const std::string &light_name, bool cast_shadows) override
bool HasGeometry(const std::string &object_name) const override
void EnableIndirectLight(bool enable) override
void UpdateLight(const std::string &light_name, const Light &light) override
void SetActiveCamera(const std::string &camera_name) override
void SetSunLightColor(const Eigen::Vector3f &color) override
float GetIndirectLightIntensity() override
void SetBackground(const Eigen::Vector4f &color, const std::shared_ptr< geometry::Image > image=nullptr) override
float GetSunLightIntensity() override
Transform GetIndirectLightRotation() override
void AddCamera(const std::string &camera_name, std::shared_ptr< Camera > cam) override
void SetGeometryPriority(const std::string &object_name, uint8_t priority) override
void RenderToDepthImage(std::function< void(std::shared_ptr< geometry::Image >)> callback) override
Size of image is the size of the window.
Light & GetLight(const std::string &light_name) override
filament::Scene * GetNativeScene() const
ccBBox GetGeometryBoundingBox(const std::string &object_name) override
void UpdateLightConeAngles(const std::string &light_name, float inner_cone_angle, float outer_cone_angle) override
void SetGroundPlaneColor(const Eigen::Vector4f &color) override
bool GetSkyboxVisible() const override
void SetGeometryTransform(const std::string &object_name, const Transform &transform) override
void GeometryShadows(const std::string &object_name, bool cast_shadows, bool receive_shadows) override
void UpdateLightColor(const std::string &light_name, const Eigen::Vector3f &color) override
void UpdateLightIntensity(const std::string &light_name, float intensity) override
void SetSunAngularRadius(float radius) override
bool SetIndirectLight(const std::string &ibl_name) override
void QueryGeometry(std::vector< std::string > &geometry) override
void EnableSunLightShadows(bool enable) override
Eigen::Vector3f GetSunLightColor() override
void OverrideMaterialAll(const MaterialRecord &material, bool shader_only=true) override
FilamentScene(filament::Engine &engine, FilamentResourceManager &resource_mgr, Renderer &renderer)
void ShowGeometry(const std::string &object_name, bool show) override
void RemoveLight(const std::string &light_name) override
void SetGeometryCulling(const std::string &object_name, bool enable) override
void RemoveView(const ViewHandle &view_id) override
void SetViewActive(const ViewHandle &view_id, bool is_active) override
bool AddGeometry(const std::string &object_name, const ccHObject &geometry, const MaterialRecord &material, const std::string &downsampled_name="", size_t downsample_threshold=SIZE_MAX) override
void UpdateLightDirection(const std::string &light_name, const Eigen::Vector3f &direction) override
void RenderToImage(std::function< void(std::shared_ptr< geometry::Image >)> callback) override
Size of image is the size of the window.
void SetIndirectLightRotation(const Transform &rotation) override
void UpdateLightFalloff(const std::string &light_name, float falloff) override
Eigen::Vector3f GetSunLightDirection() override
void ShowSkybox(bool show) override
void SetSunLightDirection(const Eigen::Vector3f &direction) override
bool AddPointLight(const std::string &light_name, const Eigen::Vector3f &color, const Eigen::Vector3f &position, float intensity, float falloff, bool cast_shadows) override
void Draw(filament::Renderer &renderer)
Eigen::Transform< float, 3, Eigen::Affine > Transform
REHandle< EntityType::VertexBuffer > VertexBufferHandle
REHandle< EntityType::IndirectLight > IndirectLightHandle
REHandle< EntityType::Skybox > SkyboxHandle
REHandle< EntityType::IndexBuffer > IndexBufferHandle
REHandle< EntityType::MaterialInstance > MaterialInstanceHandle
Generic file read and write utility for python interface.
constexpr Rgbaf light(0.66f, 0.66f, 0.66f, 1.00f)