39 #pragma warning(disable : 4068 4146 4293 4305) 42 #include <filament/LightManager.h> 43 #include <filament/RenderableManager.h> 44 #include <utils/Entity.h> 50 #include <Eigen/Geometry> 51 #include <unordered_map> 69 class TransformManager;
75 namespace visualization {
79 class GeometryBuffersBuilder;
87 using Transform = Eigen::Transform<float, 3, Eigen::Affine>;
103 void SetViewActive(
const ViewHandle& view_id,
bool is_active)
override;
104 void SetRenderOnce(
const ViewHandle& view_id)
override;
105 void RemoveView(
const ViewHandle& view_id)
override;
108 void AddCamera(
const std::string& camera_name,
109 std::shared_ptr<Camera> cam)
override;
110 void RemoveCamera(
const std::string& camera_name)
override;
114 bool AddGeometry(
const std::string& object_name,
117 const std::string& downsampled_name =
"",
118 size_t downsample_threshold = SIZE_MAX)
override;
119 bool AddGeometry(
const std::string& object_name,
122 const std::string& downsampled_name =
"",
123 size_t downsample_threshold = SIZE_MAX)
override;
124 bool AddGeometry(
const std::string& object_name,
126 bool HasGeometry(
const std::string& object_name)
const override;
127 void UpdateGeometry(
const std::string& object_name,
130 void RemoveGeometry(
const std::string& object_name)
override;
131 void ShowGeometry(
const std::string& object_name,
bool show)
override;
132 bool GeometryIsVisible(
const std::string& object_name)
override;
133 void SetGeometryTransform(
const std::string& object_name,
135 Transform GetGeometryTransform(
const std::string& object_name)
override;
137 const std::string& object_name)
override;
138 void GeometryShadows(
const std::string& object_name,
140 bool receive_shadows)
override;
141 void SetGeometryCulling(
const std::string& object_name,
142 bool enable)
override;
143 void SetGeometryPriority(
const std::string& object_name,
144 uint8_t priority)
override;
145 void OverrideMaterial(
const std::string& object_name,
147 void QueryGeometry(std::vector<std::string>& geometry)
override;
150 bool shader_only =
true)
override;
153 bool AddPointLight(
const std::string& light_name,
154 const Eigen::Vector3f&
color,
158 bool cast_shadows)
override;
159 bool AddSpotLight(
const std::string& light_name,
160 const Eigen::Vector3f&
color,
162 const Eigen::Vector3f& direction,
165 float inner_cone_angle,
166 float outer_cone_angle,
167 bool cast_shadows)
override;
168 bool AddDirectionalLight(
const std::string& light_name,
169 const Eigen::Vector3f&
color,
170 const Eigen::Vector3f& direction,
172 bool cast_shadows)
override;
173 Light& GetLight(
const std::string& light_name)
override;
174 void RemoveLight(
const std::string& light_name)
override;
175 void UpdateLight(
const std::string& light_name,
176 const Light& light)
override;
177 void UpdateLightColor(
const std::string& light_name,
178 const Eigen::Vector3f&
color)
override;
179 void UpdateLightPosition(
const std::string& light_name,
180 const Eigen::Vector3f&
position)
override;
181 void UpdateLightDirection(
const std::string& light_name,
182 const Eigen::Vector3f& direction)
override;
183 void UpdateLightIntensity(
const std::string& light_name,
184 float intensity)
override;
185 void UpdateLightFalloff(
const std::string& light_name,
186 float falloff)
override;
187 void UpdateLightConeAngles(
const std::string& light_name,
188 float inner_cone_angle,
189 float outer_cone_angle)
override;
190 void EnableLightShadow(
const std::string& light_name,
191 bool cast_shadows)
override;
193 void SetSunLight(
const Eigen::Vector3f& direction,
194 const Eigen::Vector3f&
color,
195 float intensity)
override;
196 void EnableSunLight(
bool enable)
override;
197 void EnableSunLightShadows(
bool enable)
override;
198 void SetSunLightColor(
const Eigen::Vector3f&
color)
override;
199 Eigen::Vector3f GetSunLightColor()
override;
200 void SetSunLightIntensity(
float intensity)
override;
201 float GetSunLightIntensity()
override;
202 void SetSunLightDirection(
const Eigen::Vector3f& direction)
override;
203 Eigen::Vector3f GetSunLightDirection()
override;
204 void SetSunAngularRadius(
float radius)
override;
205 void SetSunHaloSize(
float size)
override;
206 void SetSunHaloFalloff(
float falloff)
override;
208 bool SetIndirectLight(
const std::string& ibl_name)
override;
209 const std::string& GetIndirectLight()
override;
210 void EnableIndirectLight(
bool enable)
override;
211 void SetIndirectLightIntensity(
float intensity)
override;
212 float GetIndirectLightIntensity()
override;
213 void SetIndirectLightRotation(
const Transform& rotation)
override;
214 Transform GetIndirectLightRotation()
override;
215 void ShowSkybox(
bool show)
override;
216 bool GetSkyboxVisible()
const override;
218 const Eigen::Vector4f&
color,
219 const std::shared_ptr<geometry::Image>
image =
nullptr)
override;
221 void EnableGroundPlane(
bool enable,
GroundPlane plane)
override;
222 void SetGroundPlaneColor(
const Eigen::Vector4f&
color)
override;
224 void RenderToImage(std::function<
void(std::shared_ptr<geometry::Image>)>
226 void RenderToDepthImage(
227 std::function<
void(std::shared_ptr<geometry::Image>)>
callback)
230 void Draw(filament::Renderer& renderer);
236 void HideRefractedMaterials(
bool hide =
true);
243 filament::RenderableManager::Builder& builder,
245 enum BufferReuse { kNo, kYes };
246 bool CreateAndAddFilamentEntity(
247 const std::string& object_name,
253 BufferReuse reusing_vertex_buffer = BufferReuse::kNo);
255 filament::Engine& engine_;
257 filament::Scene* scene_ =
nullptr;
261 rendering::FilamentResourceManager::kDefaultTexture;
263 rendering::FilamentResourceManager::kDefaultNormalMap;
265 rendering::FilamentResourceManager::kDefaultTexture;
267 rendering::FilamentResourceManager::kDefaultTexture;
269 rendering::FilamentResourceManager::kDefaultTexture;
271 rendering::FilamentResourceManager::kDefaultTexture;
273 rendering::FilamentResourceManager::kDefaultTexture;
275 rendering::FilamentResourceManager::kDefaultTexture;
278 struct GeometryMaterialInstance {
284 struct RenderableGeometry {
287 bool was_hidden_before_picking =
false;
288 bool cast_shadows =
true;
289 bool receive_shadows =
true;
290 bool culling_enabled =
true;
293 GeometryMaterialInstance mat;
296 utils::Entity filament_entity;
297 filament::RenderableManager::PrimitiveType primitive_type;
300 void ReleaseResources(filament::Engine& engine,
306 utils::Entity filament_entity;
310 struct ViewContainer {
311 std::unique_ptr<FilamentView> view;
312 bool is_active =
true;
313 int render_count = -1;
315 std::unordered_map<REHandle_abstract, ViewContainer> views_;
317 std::vector<RenderableGeometry*> GetGeometry(
const std::string& object_name,
318 bool warn_if_not_found =
true);
319 bool GeometryIsModel(
const std::string& object_name)
const;
320 LightEntity* GetLightInternal(
const std::string& light_name,
321 bool warn_if_not_found =
true);
322 void OverrideMaterialInternal(RenderableGeometry* geom,
324 bool shader_only =
false);
325 void UpdateMaterialProperties(RenderableGeometry& geom);
326 void UpdateDefaultLit(GeometryMaterialInstance& geom_mi);
327 void UpdateDefaultLitSSR(GeometryMaterialInstance& geom_mi);
328 void UpdateDefaultUnlit(GeometryMaterialInstance& geom_mi);
329 void UpdateNormalShader(GeometryMaterialInstance& geom_mi);
330 void UpdateDepthShader(GeometryMaterialInstance& geom_mi);
331 void UpdateDepthValueShader(GeometryMaterialInstance& geom_mi);
332 void UpdateGradientShader(GeometryMaterialInstance& geom_mi);
333 void UpdateSolidColorShader(GeometryMaterialInstance& geom_mi);
334 void UpdateBackgroundShader(GeometryMaterialInstance& geom_mi);
335 void UpdateGroundPlaneShader(GeometryMaterialInstance& geom_mi);
336 void UpdateLineShader(GeometryMaterialInstance& geom_mi);
337 void UpdateUnlitPolygonOffsetShader(GeometryMaterialInstance& geom_mi);
338 utils::EntityInstance<filament::TransformManager>
339 GetGeometryTransformInstance(RenderableGeometry* geom);
340 void CreateSunDirectionalLight();
341 void CreateBackgroundGeometry();
342 void CreateGroundPlaneGeometry();
344 std::unordered_map<std::string, RenderableGeometry> geometries_;
345 std::unordered_map<std::string, LightEntity> lights_;
346 std::unordered_map<std::string, std::vector<std::string>> model_geometries_;
348 Eigen::Vector4f background_color_;
349 std::shared_ptr<geometry::Image> background_image_;
350 std::string ibl_name_;
351 bool ibl_enabled_ =
false;
352 bool skybox_enabled_ =
false;
353 std::weak_ptr<filament::IndirectLight> indirect_light_;
354 std::weak_ptr<filament::Skybox> skybox_;
void Draw(const std::vector< std::shared_ptr< geometry::Geometry3D >> &geometries, const std::string &window_name, int width, int height, const std::vector< DrawAction > &actions)
Definition: Draw.cpp:63
void Copy(const Tensor &src, Tensor &dst)
Definition: UnaryEW.cpp:65
Eigen::Transform< float, 3, Eigen::Affine > Transform
Definition: FilamentScene.h:87
Definition: MaterialRecord.h:41
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:557
A bounding box that is aligned along the coordinate axes.
Definition: BoundingVolume.h:150
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:398
Definition: FilamentResourceManager.h:69
math::float4 color
Definition: LineSetBuffers.cpp:64
Definition: Renderer.h:74
The base geometry class for 3D geometries.
Definition: Geometry3D.h:47
math::float3 position
Definition: LineSetBuffers.cpp:62
A point cloud contains a list of 3D points.
Definition: PointCloud.h:95
GroundPlane
Definition: Scene.h:200
Definition: FilamentScene.h:85
The base geometry class.
Definition: Geometry.h:38
Definition: FilamentGeometryBuffersBuilder.h:76
Definition: PinholeCameraIntrinsic.cpp:35
Definition: FilamentEngine.h:31
std::shared_ptr< core::Tensor > image
Definition: FilamentRenderer.cpp:228
bool SetActiveCamera(const std::string &path, std::shared_ptr< ConnectionBase > connection)
Definition: RemoteFunctions.cpp:388
std::function< void(std::shared_ptr< core::Tensor >)> callback
Definition: FilamentRenderer.cpp:227
filament::Scene * GetNativeScene() const
Definition: FilamentScene.h:239