Foundation
Loading...
Searching...
No Matches
Scene.hpp
Go to the documentation of this file.
1#pragma once
2#include <Core/JobSystem.hpp>
3#include <Renderer/Mesh.hpp>
4#include <Renderer/Curve.hpp>
7#include <utility>
8
10struct GPUSceneDesc;
11
12// Components
13enum class FInstanceType : uint32_t
14{
15 Mesh = 0,
16 Curve = 1,
17};
19{
22 FUUID id{};
23 FUUID name{}; // FStringEntry id; kNilUUID when unnamed.
25 FUUID material{}; // kDefaultMaterialUUID for implicit default.
26};
27struct FCamera
28{
30 FUUID id{};
31 float fovY;
32 bool lensEnabled{false};
33 float sensorHeightMm{36.0f};
34 float fStop{2.8f};
35 float focusDistance{10.0f};
36 uint32_t apertureBlades{0u};
37 float apertureRotation{0.0f};
38 float apertureRatio{1.0f};
39};
40// https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#metallic-roughness-material
41// https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#additional-textures
42// Sentinel value for "no texture bound"
43static constexpr uint32_t kInvalidTexture = UINT32_MAX;
44// Well-known default material at materials[0]; replaces legacy "index 0 reserved" + importer +1.
45static constexpr FUUID kDefaultMaterialUUID{ .hi = 0x0f0f0f0f0f0f0f0full, .lo = 0x0000000000000001ull };
46enum class FMaterialShaderBlock : uint32_t
47{
48 Principled = 0,
49 Hair = 1,
50};
51
53{
54 FUUID id{};
56 // sRGB.
58 // sRGB
60 // Linear. B channel: metallic, G channel: roughness
62 // Linear. Tangent space XYZ, R [0.0 .. 1.0] to X [-1 .. 1], G [0.0 .. 1.0] to Y [-1 .. 1], B (0.5 .. 1.0] maps to Z
63 // (0 .. 1]
65 // glTF material.normalTextureInfo.scale; scales normal-map X/Y before TBN application.
66 float normalScale = 1.0f;
67 // Linear. R channel.
69 // Linear. A channel.
71 // sRGB. RGB channels.
73 // Linear. RG direction in tangent space, B strength.
75 // sRGB. RGB channels.
77 // Linear. A channel per KHR_materials_sheen.
79 // Linear. R channel per KHR_materials_clearcoat.
81 // Linear. G channel per KHR_materials_clearcoat.
83 // Linear RGB. A is opacity (linear).
85 // Linear RGB. W is intensity multiplier (linear).
90 float ior = 1.5f;
91 float specularFactor = 1.0f;
92 // Linear RGB.
93 float3 specularColorFactor{1.0f, 1.0f, 1.0f};
94 float anisotropyStrength = 0.0f;
95 float anisotropyRotation = 0.0f;
96 // Linear RGB.
97 float3 sheenColorFactor{0.0f, 0.0f, 0.0f};
99 float clearcoatFactor = 0.0f;
101 float subsurfaceFactor = 0.0f;
102 float subsurfaceScale = 0.05f;
103 // Linear RGB.
104 float3 subsurfaceColor{1.0f, 1.0f, 1.0f};
105 float3 subsurfaceRadius{1.0f, 0.2f, 0.1f};
107 float hairBetaM = 0.25f;
108 float hairBetaN = 0.5f;
109 float hairAlpha = 2.0f;
110};
111enum class FLightType : uint32_t
112{
113 Environment = 0,
114 Directional = 1,
115 Point = 2,
116 Spot = 3,
117 Disk = 4,
118 Rect = 5,
119};
120inline constexpr uint32_t kMaxSceneLights = 1024;
121struct FLight
122{
124 FUUID id{};
127 float3 color{1,1,1}; // Linear normalized RGB chromaticity
128 float power{1.0f}; // Radiant power (type-dependent unit, linear)
129 float angularDiameter{0.0f}; // For directional lights, the apparent size of the light source disk (radians). 0 = punctual.
130 float radius{0.0f}; // Point/Spot emitter sphere radius. 0 = punctual.
131 float range{0.0f}; // Point/Spot influence range. 0 = infinite.
132 float spotInnerConeAngle{0.0f}; // radians
133 float spotOuterConeAngle{0.7853981f}; // radians, default ~45 deg
134 bool useShadow{true};
135 // Disk/Rect light (half-extents)
136 float width{1.0f};
137 float height{1.0f};
138 bool twoSided{false};
139 bool normalize{true};
140 bool environmentMap{false};
143 // Scene-node hierarchy index for rigid node animation; -1 when static.
144 int32_t node{-1};
145
147};
148
150{
151 FLight light{};
152 light.id = FUUID::Generate();
153 light.type = FLightType::Environment;
154 light.color = float3{0.05f, 0.05f, 0.05f};
155 light.power = 1.0f;
156 light.node = -1;
157 return light;
158}
159
161{
162 float postExposure{0.0f};
163 uint32_t viewLutSdrIndex{1u};
164 uint32_t viewLutHdrIndex{1u};
165};
166static constexpr uint32_t kSceneMagic = fourCC("FSCN");
167static constexpr uint32_t kSceneVersion = 27;
168
169// Stringpool entry
171{
172 FUUID id{};
174};
175
194
195// id -> table index; rebuilt via FImportedScene::RebuildIndex.
197{
205
207 : strings(alloc), instances(alloc), materials(alloc), lights(alloc), textures(alloc),
208 meshes(alloc), curves(alloc)
209 {
210 }
211
212 static int Find(HashMap<FUUID, uint32_t> const& map, FUUID id)
213 {
214 if (id.IsNil())
215 return -1;
216 auto it = map.find(id);
217 return it == map.end() ? -1 : static_cast<int>(it->second);
218 }
219};
220
221template <>
222inline void FSerialize(FWriter& writer, FSerializedMesh const& mesh)
223{
224 FSerialize(writer, mesh.id);
225 FSerialize(writer, mesh.bounds);
226 FSerialize(writer, mesh.vertices);
227 FSerialize(writer, mesh.vertexCount);
228 FSerialize(writer, mesh.lods);
229 FSerialize(writer, mesh.dagGroups);
230 FSerialize(writer, mesh.dagMeshlets);
231 FSerialize(writer, mesh.dagMeshletTri);
232 FSerialize(writer, mesh.dagMeshletVtx);
233 FSerialize(writer, mesh.emissiveMeshlets);
234 FSerialize(writer, mesh.emissiveAliases);
235 FSerialize(writer, mesh.emissivePrimitiveMap);
236}
237
238template <>
239inline void FDeserialize(FReader& reader, FSerializedMesh& mesh)
240{
241 FDeserialize(reader, mesh.id);
242 FDeserialize(reader, mesh.bounds);
243 FDeserialize(reader, mesh.vertices);
244 FDeserialize(reader, mesh.vertexCount);
245 FDeserialize(reader, mesh.lods);
246 FDeserialize(reader, mesh.dagGroups);
247 FDeserialize(reader, mesh.dagMeshlets);
248 FDeserialize(reader, mesh.dagMeshletTri);
249 FDeserialize(reader, mesh.dagMeshletVtx);
250 FDeserialize(reader, mesh.emissiveMeshlets);
251 FDeserialize(reader, mesh.emissiveAliases);
253}
254
255
256
257// FStringEntry: id is FUUID::FromString(value).
258template <>
259inline void FSerialize(FWriter& writer, FStringEntry const& entry)
260{
261 FSerialize(writer, entry.id);
262 FSerialize(writer, entry.value);
263}
264template <>
265inline void FDeserialize(FReader& reader, FStringEntry& entry)
266{
267 FDeserialize(reader, entry.id);
268 FDeserialize(reader, entry.value);
269}
270
271template <>
272inline void FSerialize(FWriter& writer, FSceneTables const& tables)
273{
274 FSerialize(writer, tables.globals);
275 FSerialize(writer, tables.strings);
276 FSerialize(writer, tables.cameras);
277 FSerialize(writer, tables.lights);
278 FSerialize(writer, tables.instances);
279 FSerialize(writer, tables.materials);
280 FSerialize(writer, tables.meshes);
281 FSerialize(writer, tables.curves);
282 FSerialize(writer, tables.textures);
283}
284
285template <>
286inline void FDeserialize(FReader& reader, FSceneTables& tables)
287{
288 FDeserialize(reader, tables.globals);
289 FDeserialize(reader, tables.strings);
290 FDeserialize(reader, tables.cameras);
291 FDeserialize(reader, tables.lights);
292 FDeserialize(reader, tables.instances);
293 FDeserialize(reader, tables.materials);
294 FDeserialize(reader, tables.meshes, tables.meshes.get_allocator().mResource);
295 FDeserialize(reader, tables.curves);
296 FDeserialize(reader, tables.textures, tables.textures.get_allocator().mResource);
297}
298
300{
302 uint32_t headerSize{0};
303 uint64_t metadataOffset{0};
304 uint64_t metadataSize{0};
305 uint64_t payloadOffset{0};
306 uint64_t fileSize{0};
307 uint32_t payloadAlignment{16};
309};
310
312{
313 // Resident metadata in memory. Payload blobs stay in the external mapped file.
317 // Non-owning mapped file view where payload blobs are stored. Lifetime is owned by the caller.
320 uint64_t mWriteOffset{0};
321 bool mWriting{false};
322
323 // Constructs FImportedScene view over a mapped file. Writable mappings start a new append-only scene.
324 explicit FImportedScene(MemoryMappedFile& file, Allocator* scratchAlloc = GLOBAL_ALLOC);
326
327 // Append-only operations
328 void Set(FSceneGlobals const& globals)
329 {
330 CHECK(mFile != nullptr);
331 mTables.globals = globals;
332 }
333 void Add(FCamera const& camera)
334 {
336 mTables.cameras.push_back(camera);
337 }
338 void Add(FLight const& light)
339 {
341 mTables.lights.push_back(light);
342 }
343 void Add(FInstance const& instance)
344 {
346 mTables.instances.push_back(instance);
347 }
348 void Add(FMaterial const& material)
349 {
351 mTables.materials.push_back(material);
352 }
353 void Add(FSerializedMesh const& mesh)
354 {
356 mTables.meshes.push_back(mesh);
357 }
358 void Add(FSerializedCurve const& curve)
359 {
361 mTables.curves.push_back(curve);
362 }
363 void Add(FSerializedTexture const& texture)
364 {
366 mTables.textures.push_back(texture);
367 }
368
369 // Reader only operations
370 // Resident data changes are local, and never reflected in the file
371 FSceneGlobals const& GetSceneGlobals() const { return mTables.globals; }
373
374 Span<FCamera const> GetCameras() const { return {mTables.cameras.data(), mTables.cameras.size()}; }
375 Span<FCamera> GetCameras() { return {mTables.cameras.data(), mTables.cameras.size()}; }
376
377 Span<FLight const> GetLights() const { return {mTables.lights.data(), mTables.lights.size()}; }
378 Span<FLight> GetLights() { return {mTables.lights.data(), mTables.lights.size()}; }
380 {
381 if (mTables.lights.empty())
382 return nullptr;
384 return &mTables.lights.front();
385 }
387 {
388 if (mTables.lights.empty())
389 return nullptr;
391 return &mTables.lights.front();
392 }
394 {
395 if (mTables.lights.empty())
396 {
397 // Inserting at the front shifts every light index, so refresh the light lookups.
399 RebuildIndex();
400 }
402 return mTables.lights.front();
403 }
404
407
410
415
416 void RebuildIndex();
417
418 char const* GetName(FUUID id) const
419 {
420 int const i = FSceneIndex::Find(mIndex.strings, id);
421 return i < 0 ? nullptr : mTables.strings[static_cast<size_t>(i)].value.c_str();
422 }
423 int InstanceIndex(FUUID id) const { return FSceneIndex::Find(mIndex.instances, id); }
424 int MaterialIndex(FUUID id) const { return FSceneIndex::Find(mIndex.materials, id); }
425 int LightIndex(FUUID id) const { return FSceneIndex::Find(mIndex.lights, id); }
426 int TextureIndex(FUUID id) const { return FSceneIndex::Find(mIndex.textures, id); }
427 int MeshIndex(FUUID id) const { return FSceneIndex::Find(mIndex.meshes, id); }
428 int CurveIndex(FUUID id) const { return FSceneIndex::Find(mIndex.curves, id); }
429
430 // Content-addressed string pool; main-thread only during glTF build.
431 FUUID InternString(const char* s)
432 {
433 if (!s || !*s)
434 return kNilUUID;
435 FUUID const id = FUUID::FromString(s);
436 if (mIndex.strings.find(id) == mIndex.strings.end())
437 {
438 mIndex.strings.emplace(id, static_cast<uint32_t>(mTables.strings.size()));
439 mTables.strings.push_back(FStringEntry{id, s});
440 }
441 return id;
442 }
443
446 bool ReadBlob(FBlobRef const& blob, void* dst, size_t size, Allocator* scratchAlloc) const;
448
449 template <typename T>
451 {
452 return GetBlobDeserializer().ReadArray<T>(blob, alloc);
453 }
454};
455
456enum class FSceneTextureCompression : uint32_t
457{
458 BC7 = 0,
459 None = 1,
460};
461
473
474// app provides platform file queries (texture/HDRI discovery next to the scene file).
476 Allocator* scratchAlloc = GLOBAL_ALLOC, FSceneBuildOptions const& buildOptions = FSceneBuildOptions{});
477void LoadFSCN(FImportedScene& scene);
478
484 Allocator* scratchAlloc = GLOBAL_ALLOC, FSceneBuildOptions const& buildOptions = FSceneBuildOptions{});
#define GLOBAL_ALLOC
Definition Allocator.hpp:240
#define CHECK(expr)
Definition Logging.hpp:92
String LoadScene(Foundation::RHI::RHIApplication const &app, JobSystem *jobs, StringView path, FImportedScene &scene, Allocator *scratchAlloc=GLOBAL_ALLOC, FSceneBuildOptions const &buildOptions=FSceneBuildOptions{})
Definition Scene.cpp:1797
void FSerialize(FWriter &writer, FSerializedMesh const &mesh)
Definition Scene.hpp:222
FSceneTextureCompression
Definition Scene.hpp:457
FLightType
Definition Scene.hpp:112
FMaterialShaderBlock
Definition Scene.hpp:47
void LoadGLTF(Foundation::RHI::RHIApplication const &app, JobSystem *jobs, StringView path, FImportedScene &scene, Allocator *scratchAlloc=GLOBAL_ALLOC, FSceneBuildOptions const &buildOptions=FSceneBuildOptions{})
Definition Scene.cpp:1768
void LoadFSCN(FImportedScene &scene)
Definition Scene.cpp:1778
FLight MakeDefaultEnvironmentLight()
Definition Scene.hpp:149
constexpr uint32_t kMaxSceneLights
Definition Scene.hpp:120
FInstanceType
Definition Scene.hpp:14
static constexpr uint32_t kSceneVersion
Definition Scene.hpp:167
static constexpr uint32_t kInvalidTexture
Definition Scene.hpp:43
static constexpr FUUID kDefaultMaterialUUID
Definition Scene.hpp:45
void FDeserialize(FReader &reader, FSerializedMesh &mesh)
Definition Scene.hpp:239
static constexpr uint32_t kSceneMagic
Definition Scene.hpp:166
constexpr uint32_t fourCC(const char a, const char b, const char c, const char d)
Definition Serialization.hpp:13
Allocator interface (noexcept)
Definition Allocator.hpp:29
Definition JobSystem.hpp:135
Definition MemoryMapped.hpp:15
The root object of everything RHI. Implementation of this class inherently defines the RHI backend.
Definition Application.hpp:24
std::vector< T, StlAllocator< T > > Vector
std::vector with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:149
static constexpr FUUID kNilUUID
Definition UUID.hpp:56
std::unordered_map< K, V, Hash, KeyEq, StlAllocator< Pair< const K, V > > > HashMap
std::unordered_map with explicit Foundation::Core::StlAllocator constructor.
Definition Container.hpp:186
std::basic_string< char, std::char_traits< char >, StlDefaultAllocator< char > > String
Alias for std::basic_string<char>, without an explicit allocator constructor.
Definition Container.hpp:120
std::basic_string_view< char > StringView
Alias for std::basic_string_view<char>
Definition Container.hpp:56
std::span< T > Span
Alias for std::span
Definition Container.hpp:62
vec3 float3
Definition Math.hpp:26
vec4 float4
Definition Math.hpp:25
Low-level Rendering Hardware Interface (RHI) abstractions.
Definition Application.hpp:3
Mesh
Definition Common.hpp:301
Definition Serialization.hpp:119
bool ReadArray(FBlobRef const &blob, Vector< T > &values, Allocator *scratchAlloc) const
Definition Serialization.hpp:128
Definition Serialization.hpp:27
Definition Scene.hpp:28
float fStop
Definition Scene.hpp:34
float apertureRatio
Definition Scene.hpp:38
float fovY
Definition Scene.hpp:31
float focusDistance
Definition Scene.hpp:35
float apertureRotation
Definition Scene.hpp:37
float sensorHeightMm
Definition Scene.hpp:33
uint32_t apertureBlades
Definition Scene.hpp:36
FTransform transform
Definition Scene.hpp:29
bool lensEnabled
Definition Scene.hpp:32
Definition Scene.hpp:312
void Add(FLight const &light)
Definition Scene.hpp:338
bool ReadBlob(FBlobRef const &blob, void *dst, size_t size, Allocator *scratchAlloc) const
Definition Scene.cpp:1662
void RebuildIndex()
Definition Scene.cpp:1634
MemoryMappedFile * mFile
Definition Scene.hpp:318
FLight & EnsureEnvironmentLight()
Definition Scene.hpp:393
FSceneHeader mHeader
Definition Scene.hpp:314
void Add(FSerializedTexture const &texture)
Definition Scene.hpp:363
FSceneGlobals & GetSceneGlobals()
Definition Scene.hpp:372
bool mWriting
Definition Scene.hpp:321
FSceneIndex mIndex
Definition Scene.hpp:316
FLight const * GetEnvironmentLight() const
Definition Scene.hpp:379
FSceneTables mTables
Definition Scene.hpp:315
FSceneGlobals const & GetSceneGlobals() const
Definition Scene.hpp:371
int LightIndex(FUUID id) const
Definition Scene.hpp:425
void Add(FInstance const &instance)
Definition Scene.hpp:343
Span< FSerializedMesh const > GetMeshes() const
Definition Scene.hpp:411
void Add(FSerializedCurve const &curve)
Definition Scene.hpp:358
char const * GetName(FUUID id) const
Definition Scene.hpp:418
Span< FLight const > GetLights() const
Definition Scene.hpp:377
Span< FSerializedTexture const > GetTextures() const
Definition Scene.hpp:413
Span< FSerializedCurve const > GetCurves() const
Definition Scene.hpp:412
GPUSceneDesc CalculateGPUSceneDesc(Foundation::RHI::RHIDeviceCapabilities const &caps) const
Definition Scene.cpp:1667
Span< const unsigned char > GetPayloadBytes() const
Definition Scene.cpp:1652
Allocator * mScratchAlloc
Definition Scene.hpp:319
~FImportedScene()
Definition Scene.cpp:1762
Span< FInstance > GetInstances()
Definition Scene.hpp:406
int MeshIndex(FUUID id) const
Definition Scene.hpp:427
void Add(FMaterial const &material)
Definition Scene.hpp:348
int CurveIndex(FUUID id) const
Definition Scene.hpp:428
Span< FCamera > GetCameras()
Definition Scene.hpp:375
Span< FMaterial > GetMaterials()
Definition Scene.hpp:409
void Add(FSerializedMesh const &mesh)
Definition Scene.hpp:353
Span< FLight > GetLights()
Definition Scene.hpp:378
Span< FInstance const > GetInstances() const
Definition Scene.hpp:405
void Set(FSceneGlobals const &globals)
Definition Scene.hpp:328
int MaterialIndex(FUUID id) const
Definition Scene.hpp:424
uint64_t mWriteOffset
Definition Scene.hpp:320
FUUID InternString(const char *s)
Definition Scene.hpp:431
int TextureIndex(FUUID id) const
Definition Scene.hpp:426
FLight * GetEnvironmentLight()
Definition Scene.hpp:386
FBlobDeserializer GetBlobDeserializer() const
Definition Scene.cpp:1660
Span< FStringEntry const > GetStrings() const
Definition Scene.hpp:414
Span< FCamera const > GetCameras() const
Definition Scene.hpp:374
int InstanceIndex(FUUID id) const
Definition Scene.hpp:423
void Add(FCamera const &camera)
Definition Scene.hpp:333
Span< FMaterial const > GetMaterials() const
Definition Scene.hpp:408
Vector< T > ReadBlobArray(FBlobRef const &blob, Allocator *alloc=GLOBAL_ALLOC) const
Definition Scene.hpp:450
Definition Scene.hpp:19
FUUID material
Definition Scene.hpp:25
FTransform transform
Definition Scene.hpp:20
FUUID resource
Definition Scene.hpp:24
FUUID name
Definition Scene.hpp:23
FInstanceType type
Definition Scene.hpp:21
Definition Scene.hpp:122
bool twoSided
Definition Scene.hpp:138
FUUID environmentTexture
Definition Scene.hpp:141
FTransform transform
Definition Scene.hpp:123
float spotInnerConeAngle
Definition Scene.hpp:132
FUUID name
Definition Scene.hpp:125
float environmentAzimuthOffset
Definition Scene.hpp:142
FUUID id
Definition Scene.hpp:124
float radius
Definition Scene.hpp:130
float3 color
Definition Scene.hpp:127
float range
Definition Scene.hpp:131
float width
Definition Scene.hpp:136
bool HasEnvironmentTexture() const
Definition Scene.hpp:146
float power
Definition Scene.hpp:128
float height
Definition Scene.hpp:137
bool useShadow
Definition Scene.hpp:134
bool normalize
Definition Scene.hpp:139
int32_t node
Definition Scene.hpp:144
bool environmentMap
Definition Scene.hpp:140
float angularDiameter
Definition Scene.hpp:129
float spotOuterConeAngle
Definition Scene.hpp:133
FLightType type
Definition Scene.hpp:126
Definition Scene.hpp:53
float specularFactor
Definition Scene.hpp:91
float roughnessFactor
Definition Scene.hpp:88
float clearcoatFactor
Definition Scene.hpp:99
FUUID name
Definition Scene.hpp:55
float4 baseColorFactor
Definition Scene.hpp:84
float hairAlpha
Definition Scene.hpp:109
FUUID normalTexture
Definition Scene.hpp:64
float hairBetaM
Definition Scene.hpp:107
float normalScale
Definition Scene.hpp:66
FUUID clearcoatRoughnessTexture
Definition Scene.hpp:82
FUUID specularTexture
Definition Scene.hpp:70
FMaterialShaderBlock shaderBlockID
Definition Scene.hpp:106
float subsurfaceFactor
Definition Scene.hpp:101
FUUID baseColorTexture
Definition Scene.hpp:57
float transmissionFactor
Definition Scene.hpp:89
FUUID anisotropyTexture
Definition Scene.hpp:74
float4 emissiveFactor
Definition Scene.hpp:86
float anisotropyStrength
Definition Scene.hpp:94
float3 subsurfaceRadius
Definition Scene.hpp:105
FUUID sheenRoughnessTexture
Definition Scene.hpp:78
float anisotropyRotation
Definition Scene.hpp:95
FUUID sheenColorTexture
Definition Scene.hpp:76
float sheenRoughnessFactor
Definition Scene.hpp:98
float clearcoatRoughnessFactor
Definition Scene.hpp:100
float metallicFactor
Definition Scene.hpp:87
float hairBetaN
Definition Scene.hpp:108
float3 subsurfaceColor
Definition Scene.hpp:104
FUUID transmissionTexture
Definition Scene.hpp:68
float3 specularColorFactor
Definition Scene.hpp:93
FUUID emissiveTexture
Definition Scene.hpp:59
FUUID metallicRoughnessTexture
Definition Scene.hpp:61
float subsurfaceScale
Definition Scene.hpp:102
float ior
Definition Scene.hpp:90
FUUID specularColorTexture
Definition Scene.hpp:72
FUUID clearcoatTexture
Definition Scene.hpp:80
float3 sheenColorFactor
Definition Scene.hpp:97
Definition Serialization.hpp:45
Definition Scene.hpp:463
bool generateMeshlets
Definition Scene.hpp:470
FSceneTextureCompression textureCompression
Definition Scene.hpp:467
bool generateMipmaps
Definition Scene.hpp:469
bool optimizeMeshes
Definition Scene.hpp:471
Definition Scene.hpp:161
uint32_t viewLutHdrIndex
Definition Scene.hpp:164
float postExposure
Definition Scene.hpp:162
uint32_t viewLutSdrIndex
Definition Scene.hpp:163
Definition Scene.hpp:300
uint32_t payloadAlignment
Definition Scene.hpp:307
uint32_t version
Definition Scene.hpp:308
uint64_t fileSize
Definition Scene.hpp:306
uint64_t payloadOffset
Definition Scene.hpp:305
uint64_t metadataSize
Definition Scene.hpp:304
uint32_t headerSize
Definition Scene.hpp:302
uint64_t metadataOffset
Definition Scene.hpp:303
uint32_t magic
Definition Scene.hpp:301
Definition Scene.hpp:197
HashMap< FUUID, uint32_t > lights
Definition Scene.hpp:201
static int Find(HashMap< FUUID, uint32_t > const &map, FUUID id)
Definition Scene.hpp:212
FSceneIndex(Allocator *alloc=GLOBAL_ALLOC)
Definition Scene.hpp:206
HashMap< FUUID, uint32_t > textures
Definition Scene.hpp:202
HashMap< FUUID, uint32_t > meshes
Definition Scene.hpp:203
HashMap< FUUID, uint32_t > materials
Definition Scene.hpp:200
HashMap< FUUID, uint32_t > curves
Definition Scene.hpp:204
HashMap< FUUID, uint32_t > instances
Definition Scene.hpp:199
HashMap< FUUID, uint32_t > strings
Definition Scene.hpp:198
Definition Scene.hpp:177
Vector< FCamera > cameras
Definition Scene.hpp:180
Vector< FMaterial > materials
Definition Scene.hpp:183
Vector< FInstance > instances
Definition Scene.hpp:182
Vector< FSerializedTexture > textures
Definition Scene.hpp:186
Vector< FSerializedMesh > meshes
Definition Scene.hpp:184
FSceneTables(Allocator *alloc=GLOBAL_ALLOC)
Definition Scene.hpp:188
Vector< FLight > lights
Definition Scene.hpp:181
Vector< FSerializedCurve > curves
Definition Scene.hpp:185
Vector< FStringEntry > strings
Definition Scene.hpp:179
FSceneGlobals globals
Definition Scene.hpp:178
Definition Curve.hpp:26
Definition Mesh.hpp:100
FBlobRef emissivePrimitiveMap
Definition Mesh.hpp:112
FSerializedBounds bounds
Definition Mesh.hpp:102
FUUID id
Definition Mesh.hpp:101
uint32_t vertexCount
Definition Mesh.hpp:104
FBlobRef emissiveMeshlets
Definition Mesh.hpp:110
FBlobRef dagMeshlets
Definition Mesh.hpp:107
Vector< FSerializedMeshLOD > lods
Definition Mesh.hpp:105
FBlobRef dagMeshletVtx
Definition Mesh.hpp:109
FBlobRef vertices
Definition Mesh.hpp:103
FBlobRef emissiveAliases
Definition Mesh.hpp:111
FBlobRef dagGroups
Definition Mesh.hpp:106
FBlobRef dagMeshletTri
Definition Mesh.hpp:108
Definition Texture.hpp:46
Definition Scene.hpp:171
FUUID id
Definition Scene.hpp:172
String value
Definition Scene.hpp:173
Definition Metadata.hpp:7
Definition Serialization.hpp:37
128-bit identifier. Two flavors, both well-formed per RFC 9562:
Definition UUID.hpp:35
bool IsNil() const noexcept
Definition UUID.hpp:39
static FUUID FromString(std::string_view s)
Definition UUID.hpp:50
static FUUID Generate()
Definition UUID.cpp:85
uint64_t hi
Definition UUID.hpp:36
Definition GPUScene.hpp:172