Open3D (C++ API)  0.20.0
Loading...
Searching...
No Matches
FilamentScene.h
Go to the documentation of this file.
1// ----------------------------------------------------------------------------
2// - Open3D: www.open3d.org -
3// ----------------------------------------------------------------------------
4// Copyright (c) 2018-2026 www.open3d.org
5// SPDX-License-Identifier: MIT
6// ----------------------------------------------------------------------------
7
8#pragma once
9
10// 4068: Filament has some clang-specific vectorizing pragma's that MSVC flags
11// 4146: Filament's utils/algorithm.h utils::details::ctz() tries to negate
12// an unsigned int.
13// 4293: Filament's utils/algorithm.h utils::details::clz() does strange
14// things with MSVC. Somehow sizeof(unsigned int) > 4, but its size is
15// 32 so that x >> 32 gives a warning. (Or maybe the compiler can't
16// determine the if statement does not run.)
17// 4305: LightManager.h needs to specify some constants as floats
18#ifdef _MSC_VER
19#pragma warning(push)
20#pragma warning(disable : 4068 4146 4293 4305)
21#endif // _MSC_VER
22
23#include <filament/LightManager.h>
24#include <filament/RenderableManager.h>
25#include <utils/Entity.h>
26
27#ifdef _MSC_VER
28#pragma warning(pop)
29#endif // _MSC_VER
30
31#include <Eigen/Geometry>
32#include <cstdint>
33#include <functional>
34#include <memory>
35#include <unordered_map>
36#include <vector>
37
45
47namespace filament {
48class Box;
49class Engine;
50class IndirectLight;
51class Renderer;
52class Scene;
53class Skybox;
54class TransformManager;
55class VertexBuffer;
56} // namespace filament
58
59namespace open3d {
60namespace visualization {
61namespace rendering {
62
63class FilamentView;
64class GeometryBuffersBuilder;
65class Renderer;
66class View;
67
68// Contains renderable objects like geometry and lights
69// Can have multiple views
70class FilamentScene : public Scene {
71public:
72 using Transform = Eigen::Transform<float, 3, Eigen::Affine>;
73
74 FilamentScene(filament::Engine& engine,
75 FilamentResourceManager& resource_mgr,
76 Renderer& renderer);
78
79 Scene* Copy() override;
80
81 // NOTE: Temporarily needed to support old View interface for ImGUI
82 ViewHandle AddView(std::int32_t x,
83 std::int32_t y,
84 std::uint32_t w,
85 std::uint32_t h) override;
86
87 View* GetView(const ViewHandle& view_id) const override;
88 void SetViewActive(const ViewHandle& view_id, bool is_active) override;
89 void SetRenderOnce(const ViewHandle& view_id) override;
90 void RemoveView(const ViewHandle& view_id) override;
91
92 // Camera
93 void AddCamera(const std::string& camera_name,
94 std::shared_ptr<Camera> cam) override;
95 void RemoveCamera(const std::string& camera_name) override;
96 void SetActiveCamera(const std::string& camera_name) override;
97
98 // Scene geometry
99 bool AddGeometry(const std::string& object_name,
100 const geometry::Geometry3D& geometry,
101 const MaterialRecord& material,
102 const std::string& downsampled_name = "",
103 size_t downsample_threshold = SIZE_MAX) override;
104 bool AddGeometry(const std::string& object_name,
105 const t::geometry::Geometry& geometry,
106 const MaterialRecord& material,
107 const std::string& downsampled_name = "",
108 size_t downsample_threshold = SIZE_MAX) override;
109 bool AddGeometry(const std::string& object_name,
110 const TriangleMeshModel& model) override;
111 bool HasGeometry(const std::string& object_name) const override;
112 void UpdateGeometry(const std::string& object_name,
113 const t::geometry::PointCloud& point_cloud,
114 uint32_t update_flags) override;
115 void RemoveGeometry(const std::string& object_name) override;
116 void ShowGeometry(const std::string& object_name, bool show) override;
117 bool GeometryIsVisible(const std::string& object_name) override;
118 void SetGeometryTransform(const std::string& object_name,
119 const Transform& transform) override;
120 Transform GetGeometryTransform(const std::string& object_name) override;
122 const std::string& object_name) override;
123 void GeometryShadows(const std::string& object_name,
124 bool cast_shadows,
125 bool receive_shadows) override;
126 void SetGeometryCulling(const std::string& object_name,
127 bool enable) override;
128 void SetGeometryPriority(const std::string& object_name,
129 uint8_t priority) override;
130 void OverrideMaterial(const std::string& object_name,
131 const MaterialRecord& material) override;
132 void OverrideMaterial(const std::string& object_name,
133 const TriangleMeshModel& model) override;
134 void QueryGeometry(std::vector<std::string>& geometry) override;
135
136 void OverrideMaterialAll(const MaterialRecord& material,
137 bool shader_only = true) override;
138
139 // Lighting Environment
140 bool AddPointLight(const std::string& light_name,
141 const Eigen::Vector3f& color,
142 const Eigen::Vector3f& position,
143 float intensity,
144 float falloff,
145 bool cast_shadows) override;
146 bool AddSpotLight(const std::string& light_name,
147 const Eigen::Vector3f& color,
148 const Eigen::Vector3f& position,
149 const Eigen::Vector3f& direction,
150 float intensity,
151 float falloff,
152 float inner_cone_angle,
153 float outer_cone_angle,
154 bool cast_shadows) override;
155 bool AddDirectionalLight(const std::string& light_name,
156 const Eigen::Vector3f& color,
157 const Eigen::Vector3f& direction,
158 float intensity,
159 bool cast_shadows) override;
160 Light& GetLight(const std::string& light_name) override;
161 void RemoveLight(const std::string& light_name) override;
162 void UpdateLight(const std::string& light_name,
163 const Light& light) override;
164 void UpdateLightColor(const std::string& light_name,
165 const Eigen::Vector3f& color) override;
166 void UpdateLightPosition(const std::string& light_name,
167 const Eigen::Vector3f& position) override;
168 void UpdateLightDirection(const std::string& light_name,
169 const Eigen::Vector3f& direction) override;
170 void UpdateLightIntensity(const std::string& light_name,
171 float intensity) override;
172 void UpdateLightFalloff(const std::string& light_name,
173 float falloff) override;
174 void UpdateLightConeAngles(const std::string& light_name,
175 float inner_cone_angle,
176 float outer_cone_angle) override;
177 void EnableLightShadow(const std::string& light_name,
178 bool cast_shadows) override;
179
180 void SetSunLight(const Eigen::Vector3f& direction,
181 const Eigen::Vector3f& color,
182 float intensity) override;
183 void EnableSunLight(bool enable) override;
184 void EnableSunLightShadows(bool enable) override;
185 void SetSunLightColor(const Eigen::Vector3f& color) override;
186 Eigen::Vector3f GetSunLightColor() override;
187 void SetSunLightIntensity(float intensity) override;
188 float GetSunLightIntensity() override;
189 void SetSunLightDirection(const Eigen::Vector3f& direction) override;
190 Eigen::Vector3f GetSunLightDirection() override;
191 void SetSunAngularRadius(float radius) override;
192 void SetSunHaloSize(float size) override;
193 void SetSunHaloFalloff(float falloff) override;
194
195 bool SetIndirectLight(const std::string& ibl_name) override;
196 const std::string& GetIndirectLight() override;
197 void EnableIndirectLight(bool enable) override;
198 void SetIndirectLightIntensity(float intensity) override;
199 float GetIndirectLightIntensity() override;
200 void SetIndirectLightRotation(const Transform& rotation) override;
202 void ShowSkybox(bool show) override;
203 bool GetSkyboxVisible() const override;
204 void SetBackground(
205 const Eigen::Vector4f& color,
206 const std::shared_ptr<geometry::Image> image = nullptr) override;
207 void SetBackground(TextureHandle image) override;
208 void EnableGroundPlane(bool enable, GroundPlane plane) override;
209 void SetGroundPlaneColor(const Eigen::Vector4f& color) override;
210
211 void RenderToImage(std::function<void(std::shared_ptr<geometry::Image>)>
212 callback) override;
214 std::function<void(std::shared_ptr<geometry::Image>)> callback)
215 override;
216
217 void ForEachActiveView(const std::function<void(FilamentView&)>& callback);
219 const std::function<void(FilamentView&)>& callback);
220 bool SetRenderOnce(const FilamentView& view);
222 void ForEachView(const std::function<void(FilamentView&)>& callback) const;
223 bool HasGaussianSplatGeometry() const;
227 bool UsesGaussianSplatOutput(const FilamentView& view) const;
235
236 void Draw(filament::Renderer& renderer,
237 std::vector<FilamentView*>& rendered_views);
238
239 // NOTE: This method is to work around Filament limitation when rendering to
240 // depth buffer. Materials with SSR require multiple passes which causes a
241 // crash with render to depth since we must disable multiple passes (i.e.,
242 // post-processing) in order to get back valid, un-modified depth values.
243 void HideRefractedMaterials(bool hide = true);
244
245 // NOTE: Can GetNativeScene be removed?
246 filament::Scene* GetNativeScene() const { return scene_; }
247
248private:
249 void MarkGaussianSplatChanged();
250
251 MaterialInstanceHandle AssignMaterialToFilamentGeometry(
252 filament::RenderableManager::Builder& builder,
253 const MaterialRecord& material);
254 enum BufferReuse { kNo, kYes };
255 bool CreateAndAddFilamentEntity(
256 const std::string& object_name,
257 GeometryBuffersBuilder& buffer_builder,
258 filament::Box& aabb,
261 const MaterialRecord& material,
262 BufferReuse reusing_vertex_buffer = BufferReuse::kNo);
263
264 filament::Engine& engine_;
265 FilamentResourceManager& resource_mgr_;
266 filament::Scene* scene_ = nullptr;
267 std::uint64_t gaussian_splat_revision_ = 1;
268
269 struct TextureMaps {
270 rendering::TextureHandle albedo_map =
272 rendering::TextureHandle normal_map =
274 rendering::TextureHandle ao_rough_metal_map =
276 rendering::TextureHandle reflectance_map =
278 rendering::TextureHandle clear_coat_map =
280 rendering::TextureHandle clear_coat_roughness_map =
282 rendering::TextureHandle anisotropy_map =
284 rendering::TextureHandle gradient_texture =
286 };
287
288 struct GeometryMaterialInstance {
289 TextureMaps maps;
290 MaterialRecord properties;
291 MaterialInstanceHandle mat_instance;
292 };
293
294 struct RenderableGeometry {
295 std::string name;
296 bool visible = true;
297 bool was_hidden_before_picking = false;
298 bool cast_shadows = true;
299 bool receive_shadows = true;
300 bool culling_enabled = true;
301 int priority = -1; // default priority
302
303 GeometryMaterialInstance mat;
304 // Stored AABB for geometry registered without a Filament entity
305 // (e.g. Gaussian splats rendered via compute, not raster).
306 geometry::AxisAlignedBoundingBox aabb;
307
308 // Range within the merged Gaussian splat packed-attrs buffer.
309 // Both are zero for non-Gaussian geometry.
310 std::uint32_t gs_splat_start = 0;
311 std::uint32_t gs_splat_count = 0;
312
313 // Filament resources — filament_entity is null for compute-only
314 // geometry.
315 utils::Entity filament_entity;
316 filament::RenderableManager::PrimitiveType primitive_type;
319 void ReleaseResources(filament::Engine& engine,
320 FilamentResourceManager& manager);
321 };
322
323 struct LightEntity {
324 bool enabled = true;
325 utils::Entity filament_entity;
326 };
327
328 // NOTE: ViewContainer and views_ are temporary
329 struct ViewContainer {
330 std::unique_ptr<FilamentView> view;
331 bool is_active = true;
332 int render_count = -1;
333 };
334 std::unordered_map<REHandle_abstract, ViewContainer> views_;
335
336 std::vector<RenderableGeometry*> GetGeometry(const std::string& object_name,
337 bool warn_if_not_found = true);
338 bool GeometryIsModel(const std::string& object_name) const;
339 LightEntity* GetLightInternal(const std::string& light_name,
340 bool warn_if_not_found = true);
341 void OverrideMaterialInternal(RenderableGeometry* geom,
342 const MaterialRecord& material,
343 bool shader_only = false);
344 void UpdateMaterialProperties(RenderableGeometry& geom);
345 void UpdateDefaultLit(GeometryMaterialInstance& geom_mi);
346 void UpdateDefaultLitSSR(GeometryMaterialInstance& geom_mi);
347 void UpdateDefaultUnlit(GeometryMaterialInstance& geom_mi);
348 void UpdateNormalShader(GeometryMaterialInstance& geom_mi);
349 void UpdateDepthShader(GeometryMaterialInstance& geom_mi);
350 void UpdateDepthValueShader(GeometryMaterialInstance& geom_mi);
351 void UpdateGradientShader(GeometryMaterialInstance& geom_mi);
352 void UpdateSolidColorShader(GeometryMaterialInstance& geom_mi);
353 void UpdateBackgroundShader(GeometryMaterialInstance& geom_mi);
354 void UpdateGroundPlaneShader(GeometryMaterialInstance& geom_mi);
355 void UpdateLineShader(GeometryMaterialInstance& geom_mi);
356 void UpdateUnlitPolygonOffsetShader(GeometryMaterialInstance& geom_mi);
357 utils::EntityInstance<filament::TransformManager>
358 GetGeometryTransformInstance(RenderableGeometry* geom);
359 void CreateSunDirectionalLight();
360 void CreateBackgroundGeometry();
361 void CreateGroundPlaneGeometry();
362
363 std::unordered_map<std::string, RenderableGeometry> geometries_;
364 std::unordered_map<std::string, LightEntity> lights_;
365 std::unordered_map<std::string, std::vector<std::string>> model_geometries_;
366
367 Eigen::Vector4f background_color_;
368 std::shared_ptr<geometry::Image> background_image_;
369 std::string ibl_name_;
370 bool ibl_enabled_ = false;
371 bool skybox_enabled_ = false;
372 std::weak_ptr<filament::IndirectLight> indirect_light_;
373 std::weak_ptr<filament::Skybox> skybox_;
374 IndirectLightHandle ibl_handle_;
375 SkyboxHandle skybox_handle_;
376 LightEntity sun_;
378 std::unordered_map<std::string, GaussianSplatPackedAttrs>
379 per_object_gs_attrs_;
382 std::unique_ptr<GaussianSplatPackedAttrs> merged_gs_attrs_;
383
385 void CacheGaussianSplatData(const std::string& name,
386 const t::geometry::PointCloud& cloud,
387 const MaterialRecord& material);
390 void RebuildMergedGaussianData();
391};
392
393} // namespace rendering
394} // namespace visualization
395} // namespace open3d
std::shared_ptr< core::Tensor > image
Definition FilamentRenderer.cpp:347
std::function< void(std::shared_ptr< core::Tensor >)> callback
Definition FilamentRenderer.cpp:346
math::float4 color
Definition LineSetBuffers.cpp:45
math::float3 position
Definition LineSetBuffers.cpp:43
std::int64_t y
Definition NormalDistributionsTransform.cpp:43
std::int64_t x
Definition NormalDistributionsTransform.cpp:42
SYCLDevice properties
Definition SYCLContext.cpp:86
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
void UpdateLightDirection(const std::string &light_name, const Eigen::Vector3f &direction) override
Definition FilamentScene.cpp:1932
Eigen::Vector3f GetSunLightColor() override
Definition FilamentScene.cpp:2053
void UpdateLightIntensity(const std::string &light_name, float intensity) override
Definition FilamentScene.cpp:1944
const std::string & GetIndirectLight() override
Definition FilamentScene.cpp:2140
void EnableIndirectLight(bool enable) override
Definition FilamentScene.cpp:2142
~FilamentScene()
Definition FilamentScene.cpp:257
void SetActiveCamera(const std::string &camera_name) override
Definition FilamentScene.cpp:668
void SetSunLightColor(const Eigen::Vector3f &color) override
Definition FilamentScene.cpp:2046
void RenderToDepthImage(std::function< void(std::shared_ptr< geometry::Image >)> callback) override
Size of image is the size of the window.
Definition FilamentScene.cpp:2373
void SetGeometryTransform(const std::string &object_name, const Transform &transform) override
Definition FilamentScene.cpp:1236
Eigen::Vector3f GetSunLightDirection() override
Definition FilamentScene.cpp:2089
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:1774
void SetSunLightDirection(const Eigen::Vector3f &direction) override
Definition FilamentScene.cpp:2061
void HideRefractedMaterials(bool hide=true)
Definition FilamentScene.cpp:2478
void RenderToImage(std::function< void(std::shared_ptr< geometry::Image >)> callback) override
Size of image is the size of the window.
Definition FilamentScene.cpp:2367
void EnableSunLight(bool enable) override
Definition FilamentScene.cpp:2014
void SetBackground(const Eigen::Vector4f &color, const std::shared_ptr< geometry::Image > image=nullptr) override
Definition FilamentScene.cpp:2233
void UpdateLightColor(const std::string &light_name, const Eigen::Vector3f &color) override
Definition FilamentScene.cpp:1907
Transform GetIndirectLightRotation() override
Definition FilamentScene.cpp:2175
void EnableLightShadow(const std::string &light_name, bool cast_shadows) override
Definition FilamentScene.cpp:1972
bool AddDirectionalLight(const std::string &light_name, const Eigen::Vector3f &color, const Eigen::Vector3f &direction, float intensity, bool cast_shadows) override
Definition FilamentScene.cpp:1852
void SetSunLightIntensity(float intensity) override
Definition FilamentScene.cpp:2032
geometry::AxisAlignedBoundingBox GetGeometryBoundingBox(const std::string &object_name) override
Definition FilamentScene.cpp:1271
void UpdateLightPosition(const std::string &light_name, const Eigen::Vector3f &position) override
Definition FilamentScene.cpp:1918
TextureHandle GetColorBufferForView(const FilamentView &view) const
Definition FilamentScene.cpp:456
Transform GetGeometryTransform(const std::string &object_name) override
Definition FilamentScene.cpp:1256
bool HasNonGaussianVisibleGeometry() const
Definition FilamentScene.cpp:427
void ForEachActiveView(const std::function< void(FilamentView &)> &callback)
Definition FilamentScene.cpp:386
void RemoveGeometry(const std::string &object_name) override
Definition FilamentScene.cpp:1129
bool HasGaussianSplatGeometry() const
Definition FilamentScene.cpp:418
bool SetIndirectLight(const std::string &ibl_name) override
Definition FilamentScene.cpp:2097
void SetGroundPlaneColor(const Eigen::Vector4f &color) override
Definition FilamentScene.cpp:2341
bool GeometryIsVisible(const std::string &object_name) override
Definition FilamentScene.cpp:1205
Light & GetLight(const std::string &light_name) override
Definition FilamentScene.cpp:1887
void SetIndirectLightIntensity(float intensity) override
Definition FilamentScene.cpp:2155
ViewHandle AddView(std::int32_t x, std::int32_t y, std::uint32_t w, std::uint32_t h) override
Definition FilamentScene.cpp:358
void SetSunAngularRadius(float radius) override
Definition FilamentScene.cpp:2068
void ForEachView(const std::function< void(FilamentView &)> &callback) const
Iterate over ALL views (including inactive/cached ones).
Definition FilamentScene.cpp:409
float GetSunLightIntensity() override
Definition FilamentScene.cpp:2039
void UpdateLightFalloff(const std::string &light_name, float falloff) override
Definition FilamentScene.cpp:1955
void EnableSunLightShadows(bool enable) override
Definition FilamentScene.cpp:2025
void RemoveView(const ViewHandle &view_id) override
Definition FilamentScene.cpp:659
const GaussianSplatPackedAttrs * GetGaussianSplatPackedAttrs() const
Definition FilamentScene.cpp:477
bool UsesGaussianSplatOutput(const FilamentView &view) const
Definition FilamentScene.cpp:439
bool GetSkyboxVisible() const override
Definition FilamentScene.cpp:2199
void Draw(filament::Renderer &renderer, std::vector< FilamentView * > &rendered_views)
Definition FilamentScene.cpp:2460
View * GetView(const ViewHandle &view_id) const override
Definition FilamentScene.cpp:377
void OverrideMaterialAll(const MaterialRecord &material, bool shader_only=true) override
Definition FilamentScene.cpp:1764
void SetRenderOnce(const ViewHandle &view_id) override
Definition FilamentScene.cpp:640
Scene * Copy() override
Definition FilamentScene.cpp:297
void AddCamera(const std::string &camera_name, std::shared_ptr< Camera > cam) override
Definition FilamentScene.cpp:663
void SetGeometryCulling(const std::string &object_name, bool enable) override
Definition FilamentScene.cpp:1313
void EnableGroundPlane(bool enable, GroundPlane plane) override
Definition FilamentScene.cpp:2322
void SetSunHaloSize(float size) override
Definition FilamentScene.cpp:2075
void ShowSkybox(bool show) override
Definition FilamentScene.cpp:2185
filament::Scene * GetNativeScene() const
Definition FilamentScene.h:246
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:684
void UpdateGeometry(const std::string &object_name, const t::geometry::PointCloud &point_cloud, uint32_t update_flags) override
Definition FilamentScene.cpp:975
void SetGeometryPriority(const std::string &object_name, uint8_t priority) override
Definition FilamentScene.cpp:1331
void ForEachViewToRender(const std::function< void(FilamentView &)> &callback)
Definition FilamentScene.cpp:397
void SetViewActive(const ViewHandle &view_id, bool is_active) override
Definition FilamentScene.cpp:632
void ShowGeometry(const std::string &object_name, bool show) override
Definition FilamentScene.cpp:1164
void RemoveLight(const std::string &light_name) override
Definition FilamentScene.cpp:1898
void SetSunHaloFalloff(float falloff) override
Definition FilamentScene.cpp:2082
void QueryGeometry(std::vector< std::string > &geometry) override
Definition FilamentScene.cpp:1758
void SetSunLight(const Eigen::Vector3f &direction, const Eigen::Vector3f &color, float intensity) override
Definition FilamentScene.cpp:2003
void SetIndirectLightRotation(const Transform &rotation) override
Definition FilamentScene.cpp:2168
float GetIndirectLightIntensity() override
Definition FilamentScene.cpp:2161
void GeometryShadows(const std::string &object_name, bool cast_shadows, bool receive_shadows) override
Definition FilamentScene.cpp:1299
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:1966
void RemoveCamera(const std::string &camera_name) override
Definition FilamentScene.cpp:666
bool HasGeometry(const std::string &object_name) const override
Definition FilamentScene.cpp:967
void UpdateLight(const std::string &light_name, const Light &light) override
Definition FilamentScene.cpp:1893
TextureHandle GetDepthBufferForView(const FilamentView &view) const
Definition FilamentScene.cpp:463
void OverrideMaterial(const std::string &object_name, const MaterialRecord &material) override
Definition FilamentScene.cpp:1728
void InvalidateGaussianSplatOutput(FilamentView &view)
Definition FilamentScene.cpp:470
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:1810
int size
Definition FilePCD.cpp:41
std::string name
Definition FilePCD.cpp:40
Definition FilamentEngine.h:15
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:130