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>
5#include <Renderer/Curve.hpp>
8#include <utility>
9
10namespace Foundation::RHI { struct RHIDeviceCapabilities; class RHIApplication; }
11struct GPUSceneDesc;
12
13// Components
14enum class FInstanceType : uint32_t
15{
16 Mesh = 0,
17 Curve = 1,
18};
20{
23 FUUID id{};
24 FUUID name{}; // FStringEntry id; kNilUUID when unnamed.
26 FUUID material{}; // kDefaultMaterialUUID for implicit default.
27};
28struct FCamera
29{
31 FUUID id{};
32 float fovY;
33 bool lensEnabled{false};
34 float sensorHeightMm{36.0f};
35 float fStop{2.8f};
36 float focusDistance{10.0f};
37 uint32_t apertureBlades{0u};
38 float apertureRotation{0.0f};
39 float apertureRatio{1.0f};
40};
41// https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#metallic-roughness-material
42// https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#additional-textures
43// Sentinel value for "no texture bound"
44static constexpr uint32_t kInvalidTexture = UINT32_MAX;
45// Well-known default material at materials[0]; replaces legacy "index 0 reserved" + importer +1.
46static constexpr FUUID kDefaultMaterialUUID{ .hi = 0x0f0f0f0f0f0f0f0full, .lo = 0x0000000000000001ull };
47enum class FMaterialShaderBlock : uint32_t
48{
49 Principled = 0,
50 Hair = 1,
51};
52
54{
55 FUUID id{};
57 // sRGB.
59 // sRGB
61 // Linear. B channel: metallic, G channel: roughness
63 // 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
64 // (0 .. 1]
66 // glTF material.normalTextureInfo.scale; scales normal-map X/Y before TBN application.
67 float normalScale = 1.0f;
68 // Linear. R channel.
70 // Linear. A channel.
72 // sRGB. RGB channels.
74 // Linear. RG direction in tangent space, B strength.
76 // sRGB. RGB channels.
78 // Linear. A channel per KHR_materials_sheen.
80 // Linear. R channel per KHR_materials_clearcoat.
82 // Linear. G channel per KHR_materials_clearcoat.
84 // Linear RGB. A is opacity (linear).
86 // Linear RGB. W is intensity multiplier (linear).
91 float ior = 1.5f;
92 float specularFactor = 1.0f;
93 // Linear RGB.
94 float3 specularColorFactor{1.0f, 1.0f, 1.0f};
95 float anisotropyStrength = 0.0f;
96 float anisotropyRotation = 0.0f;
97 // Linear RGB.
98 float3 sheenColorFactor{0.0f, 0.0f, 0.0f};
100 float clearcoatFactor = 0.0f;
102 float subsurfaceFactor = 0.0f;
103 float subsurfaceScale = 0.05f;
104 // Linear RGB.
105 float3 subsurfaceColor{1.0f, 1.0f, 1.0f};
106 float3 subsurfaceRadius{1.0f, 0.2f, 0.1f};
108 float hairBetaM = 0.25f;
109 float hairBetaN = 0.5f;
110 float hairAlpha = 2.0f;
111};
112enum class FLightType : uint32_t
113{
114 Environment = 0,
115 Directional = 1,
116 Point = 2,
117 Spot = 3,
118 Disk = 4,
119 Rect = 5,
120};
121inline constexpr uint32_t kMaxSceneLights = 1024;
122struct FLight
123{
125 FUUID id{};
128 float3 color{1,1,1}; // Linear normalized RGB chromaticity
129 float power{1.0f}; // Radiant power (type-dependent unit, linear)
130 float angularDiameter{0.0f}; // For directional lights, the apparent size of the light source disk (radians). 0 = punctual.
131 float radius{0.0f}; // Point/Spot emitter sphere radius. 0 = punctual.
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 = 26;
168
169// Stringpool entry
171{
172 FUUID id{};
174};
175
197
198// id -> table index; rebuilt via FImportedScene::RebuildIndex.
200{
209
211 : strings(alloc), instances(alloc), materials(alloc), lights(alloc), textures(alloc),
212 meshes(alloc), curves(alloc), skeletons(alloc)
213 {
214 }
215
216 static int Find(HashMap<FUUID, uint32_t> const& map, FUUID id)
217 {
218 if (id.IsNil())
219 return -1;
220 auto it = map.find(id);
221 return it == map.end() ? -1 : static_cast<int>(it->second);
222 }
223};
224
225template <>
226inline void FSerialize(FWriter& writer, FSerializedMesh const& mesh)
227{
228 FSerialize(writer, mesh.id);
229 FSerialize(writer, mesh.bounds);
230 FSerialize(writer, mesh.vertices);
231 FSerialize(writer, mesh.vertexCount);
232 FSerialize(writer, mesh.lods);
233 FSerialize(writer, mesh.dagGroups);
234 FSerialize(writer, mesh.dagMeshlets);
235 FSerialize(writer, mesh.dagMeshletTri);
236 FSerialize(writer, mesh.dagMeshletVtx);
237 FSerialize(writer, mesh.emissiveMeshlets);
238 FSerialize(writer, mesh.emissiveAliases);
239 FSerialize(writer, mesh.emissivePrimitiveMap);
240 FSerialize(writer, mesh.skinBinding);
241 FSerialize(writer, mesh.skeleton);
242}
243
244template <>
245inline void FDeserialize(FReader& reader, FSerializedMesh& mesh)
246{
247 FDeserialize(reader, mesh.id);
248 FDeserialize(reader, mesh.bounds);
249 FDeserialize(reader, mesh.vertices);
250 FDeserialize(reader, mesh.vertexCount);
251 FDeserialize(reader, mesh.lods);
252 FDeserialize(reader, mesh.dagGroups);
253 FDeserialize(reader, mesh.dagMeshlets);
254 FDeserialize(reader, mesh.dagMeshletTri);
255 FDeserialize(reader, mesh.dagMeshletVtx);
256 FDeserialize(reader, mesh.emissiveMeshlets);
257 FDeserialize(reader, mesh.emissiveAliases);
259 FDeserialize(reader, mesh.skinBinding);
260 FDeserialize(reader, mesh.skeleton);
261}
262
263// FJoint is trivially copyable, so a skeleton's joint array serializes in bulk.
264template <>
265inline void FSerialize(FWriter& writer, FSkeleton const& skel)
266{
267 FSerialize(writer, skel.id);
268 FSerialize(writer, skel.joints);
269}
270template <>
271inline void FDeserialize(FReader& reader, FSkeleton& skel)
272{
273 FDeserialize(reader, skel.id);
274 FDeserialize(reader, skel.joints);
275}
276
277template <>
278inline void FSerialize(FWriter& writer, FAnimChannel const& channel)
279{
280 FSerialize(writer, channel.joint);
281 FSerialize(writer, channel.path);
282 FSerialize(writer, channel.interp);
283 FSerialize(writer, channel.times);
284 FSerialize(writer, channel.values);
285}
286template <>
287inline void FDeserialize(FReader& reader, FAnimChannel& channel)
288{
289 FDeserialize(reader, channel.joint);
290 FDeserialize(reader, channel.path);
291 FDeserialize(reader, channel.interp);
292 FDeserialize(reader, channel.times);
293 FDeserialize(reader, channel.values);
294}
295
296template <>
297inline void FSerialize(FWriter& writer, FAnimationClip const& clip)
298{
299 FSerialize(writer, clip.id);
300 FSerialize(writer, clip.name);
301 FSerialize(writer, clip.channels);
302 FSerialize(writer, clip.duration);
303 FSerialize(writer, clip.skeleton);
304}
305template <>
306inline void FDeserialize(FReader& reader, FAnimationClip& clip)
307{
308 FDeserialize(reader, clip.id);
309 FDeserialize(reader, clip.name);
310 FDeserialize(reader, clip.channels, clip.channels.get_allocator().mResource);
311 FDeserialize(reader, clip.duration);
312 FDeserialize(reader, clip.skeleton);
313}
314
315// FStringEntry: id is FUUID::FromString(value).
316template <>
317inline void FSerialize(FWriter& writer, FStringEntry const& entry)
318{
319 FSerialize(writer, entry.id);
320 FSerialize(writer, entry.value);
321}
322template <>
323inline void FDeserialize(FReader& reader, FStringEntry& entry)
324{
325 FDeserialize(reader, entry.id);
326 FDeserialize(reader, entry.value);
327}
328
329template <>
330inline void FSerialize(FWriter& writer, FSceneTables const& tables)
331{
332 FSerialize(writer, tables.globals);
333 FSerialize(writer, tables.strings);
334 FSerialize(writer, tables.cameras);
335 FSerialize(writer, tables.lights);
336 FSerialize(writer, tables.instances);
337 FSerialize(writer, tables.materials);
338 FSerialize(writer, tables.meshes);
339 FSerialize(writer, tables.curves);
340 FSerialize(writer, tables.textures);
341 FSerialize(writer, tables.skeletons);
342 FSerialize(writer, tables.clips);
343 FSerialize(writer, tables.sceneNodeSkeleton);
344}
345
346template <>
347inline void FDeserialize(FReader& reader, FSceneTables& tables)
348{
349 FDeserialize(reader, tables.globals);
350 FDeserialize(reader, tables.strings);
351 FDeserialize(reader, tables.cameras);
352 FDeserialize(reader, tables.lights);
353 FDeserialize(reader, tables.instances);
354 FDeserialize(reader, tables.materials);
355 FDeserialize(reader, tables.meshes, tables.meshes.get_allocator().mResource);
356 FDeserialize(reader, tables.curves);
357 FDeserialize(reader, tables.textures, tables.textures.get_allocator().mResource);
358 FDeserialize(reader, tables.skeletons, tables.skeletons.get_allocator().mResource);
359 FDeserialize(reader, tables.clips, tables.clips.get_allocator().mResource);
360 FDeserialize(reader, tables.sceneNodeSkeleton);
361}
362
364{
366 uint32_t headerSize{0};
367 uint64_t metadataOffset{0};
368 uint64_t metadataSize{0};
369 uint64_t payloadOffset{0};
370 uint64_t fileSize{0};
371 uint32_t payloadAlignment{16};
373};
374
376{
377 // Resident metadata in memory. Payload blobs stay in the external mapped file.
381 // Non-owning mapped file view where payload blobs are stored. Lifetime is owned by the caller.
384 uint64_t mWriteOffset{0};
385 bool mWriting{false};
386
387 // Constructs FImportedScene view over a mapped file. Writable mappings start a new append-only scene.
388 explicit FImportedScene(MemoryMappedFile& file, Allocator* scratchAlloc = GLOBAL_ALLOC);
390
391 // Append-only operations
392 void Set(FSceneGlobals const& globals)
393 {
394 CHECK(mFile != nullptr);
395 mTables.globals = globals;
396 }
397 void Add(FCamera const& camera)
398 {
400 mTables.cameras.push_back(camera);
401 }
402 void Add(FLight const& light)
403 {
405 mTables.lights.push_back(light);
406 }
407 void Add(FInstance const& instance)
408 {
410 mTables.instances.push_back(instance);
411 }
412 void Add(FMaterial const& material)
413 {
415 mTables.materials.push_back(material);
416 }
417 void Add(FSerializedMesh const& mesh)
418 {
420 mTables.meshes.push_back(mesh);
421 }
422 void Add(FSerializedCurve const& curve)
423 {
425 mTables.curves.push_back(curve);
426 }
427 void Add(FSerializedTexture const& texture)
428 {
430 mTables.textures.push_back(texture);
431 }
432 void Add(FSkeleton const& skeleton)
433 {
435 mTables.skeletons.push_back(skeleton);
436 }
437 void Add(FAnimationClip const& clip)
438 {
440 mTables.clips.push_back(clip);
441 }
442
443 // Reader only operations
444 // Resident data changes are local, and never reflected in the file
445 FSceneGlobals const& GetSceneGlobals() const { return mTables.globals; }
447
448 Span<FCamera const> GetCameras() const { return {mTables.cameras.data(), mTables.cameras.size()}; }
449 Span<FCamera> GetCameras() { return {mTables.cameras.data(), mTables.cameras.size()}; }
450
451 Span<FLight const> GetLights() const { return {mTables.lights.data(), mTables.lights.size()}; }
452 Span<FLight> GetLights() { return {mTables.lights.data(), mTables.lights.size()}; }
454 {
455 if (mTables.lights.empty())
456 return nullptr;
458 return &mTables.lights.front();
459 }
461 {
462 if (mTables.lights.empty())
463 return nullptr;
465 return &mTables.lights.front();
466 }
468 {
469 if (mTables.lights.empty())
470 {
471 // Inserting at the front shifts every light index, so refresh the light lookups.
473 RebuildIndex();
474 }
476 return mTables.lights.front();
477 }
478
481
484
489 Span<FAnimationClip const> GetClips() const { return {mTables.clips.data(), mTables.clips.size()}; }
491
492 void RebuildIndex();
493
494 char const* GetName(FUUID id) const
495 {
496 int const i = FSceneIndex::Find(mIndex.strings, id);
497 return i < 0 ? nullptr : mTables.strings[static_cast<size_t>(i)].value.c_str();
498 }
499 int InstanceIndex(FUUID id) const { return FSceneIndex::Find(mIndex.instances, id); }
500 int MaterialIndex(FUUID id) const { return FSceneIndex::Find(mIndex.materials, id); }
501 int LightIndex(FUUID id) const { return FSceneIndex::Find(mIndex.lights, id); }
502 int TextureIndex(FUUID id) const { return FSceneIndex::Find(mIndex.textures, id); }
503 int MeshIndex(FUUID id) const { return FSceneIndex::Find(mIndex.meshes, id); }
504 int CurveIndex(FUUID id) const { return FSceneIndex::Find(mIndex.curves, id); }
505 int SkeletonIndex(FUUID id) const { return FSceneIndex::Find(mIndex.skeletons, id); }
506
507 // Content-addressed string pool; main-thread only during glTF build.
508 FUUID InternString(const char* s)
509 {
510 if (!s || !*s)
511 return kNilUUID;
512 FUUID const id = FUUID::FromString(s);
513 if (mIndex.strings.find(id) == mIndex.strings.end())
514 {
515 mIndex.strings.emplace(id, static_cast<uint32_t>(mTables.strings.size()));
516 mTables.strings.push_back(FStringEntry{id, s});
517 }
518 return id;
519 }
520
523 bool ReadBlob(FBlobRef const& blob, void* dst, size_t size, Allocator* scratchAlloc) const;
525
526 template <typename T>
528 {
529 return GetBlobDeserializer().ReadArray<T>(blob, alloc);
530 }
531};
532
533enum class FSceneTextureCompression : uint32_t
534{
535 BC7 = 0,
536 None = 1,
537};
538
550
551// app provides platform file queries (texture/HDRI discovery next to the scene file).
553 Allocator* scratchAlloc = GLOBAL_ALLOC, FSceneBuildOptions const& buildOptions = FSceneBuildOptions{});
554void LoadFSCN(FImportedScene& scene);
555
561 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:2083
void FSerialize(FWriter &writer, FSerializedMesh const &mesh)
Definition Scene.hpp:226
FSceneTextureCompression
Definition Scene.hpp:534
FLightType
Definition Scene.hpp:113
FMaterialShaderBlock
Definition Scene.hpp:48
void LoadGLTF(Foundation::RHI::RHIApplication const &app, JobSystem *jobs, StringView path, FImportedScene &scene, Allocator *scratchAlloc=GLOBAL_ALLOC, FSceneBuildOptions const &buildOptions=FSceneBuildOptions{})
Definition Scene.cpp:2054
void LoadFSCN(FImportedScene &scene)
Definition Scene.cpp:2064
FLight MakeDefaultEnvironmentLight()
Definition Scene.hpp:149
constexpr uint32_t kMaxSceneLights
Definition Scene.hpp:121
FInstanceType
Definition Scene.hpp:15
static constexpr uint32_t kSceneVersion
Definition Scene.hpp:167
static constexpr uint32_t kInvalidTexture
Definition Scene.hpp:44
static constexpr FUUID kDefaultMaterialUUID
Definition Scene.hpp:46
void FDeserialize(FReader &reader, FSerializedMesh &mesh)
Definition Scene.hpp:245
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 Animation.hpp:33
Vector< float > times
Definition Animation.hpp:37
FAnimPath path
Definition Animation.hpp:35
uint32_t joint
Definition Animation.hpp:34
FAnimInterp interp
Definition Animation.hpp:36
Vector< float > values
Definition Animation.hpp:38
Definition Animation.hpp:44
FUUID name
Definition Animation.hpp:46
FUUID skeleton
Definition Animation.hpp:49
float duration
Definition Animation.hpp:48
Vector< FAnimChannel > channels
Definition Animation.hpp:47
FUUID id
Definition Animation.hpp:45
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:29
float fStop
Definition Scene.hpp:35
float apertureRatio
Definition Scene.hpp:39
float fovY
Definition Scene.hpp:32
float focusDistance
Definition Scene.hpp:36
float apertureRotation
Definition Scene.hpp:38
float sensorHeightMm
Definition Scene.hpp:34
uint32_t apertureBlades
Definition Scene.hpp:37
FTransform transform
Definition Scene.hpp:30
bool lensEnabled
Definition Scene.hpp:33
Definition Scene.hpp:376
void Add(FLight const &light)
Definition Scene.hpp:402
bool ReadBlob(FBlobRef const &blob, void *dst, size_t size, Allocator *scratchAlloc) const
Definition Scene.cpp:1937
void RebuildIndex()
Definition Scene.cpp:1905
MemoryMappedFile * mFile
Definition Scene.hpp:382
FLight & EnsureEnvironmentLight()
Definition Scene.hpp:467
FSceneHeader mHeader
Definition Scene.hpp:378
void Add(FSerializedTexture const &texture)
Definition Scene.hpp:427
FSceneGlobals & GetSceneGlobals()
Definition Scene.hpp:446
bool mWriting
Definition Scene.hpp:385
FSceneIndex mIndex
Definition Scene.hpp:380
FLight const * GetEnvironmentLight() const
Definition Scene.hpp:453
FSceneTables mTables
Definition Scene.hpp:379
FSceneGlobals const & GetSceneGlobals() const
Definition Scene.hpp:445
Span< FAnimationClip const > GetClips() const
Definition Scene.hpp:489
int LightIndex(FUUID id) const
Definition Scene.hpp:501
void Add(FInstance const &instance)
Definition Scene.hpp:407
Span< FSerializedMesh const > GetMeshes() const
Definition Scene.hpp:485
void Add(FSerializedCurve const &curve)
Definition Scene.hpp:422
char const * GetName(FUUID id) const
Definition Scene.hpp:494
Span< FLight const > GetLights() const
Definition Scene.hpp:451
Span< FSerializedTexture const > GetTextures() const
Definition Scene.hpp:487
Span< FSerializedCurve const > GetCurves() const
Definition Scene.hpp:486
GPUSceneDesc CalculateGPUSceneDesc(Foundation::RHI::RHIDeviceCapabilities const &caps) const
Definition Scene.cpp:1942
Span< const unsigned char > GetPayloadBytes() const
Definition Scene.cpp:1924
Span< FSkeleton const > GetSkeletons() const
Definition Scene.hpp:488
Allocator * mScratchAlloc
Definition Scene.hpp:383
~FImportedScene()
Definition Scene.cpp:2048
Span< FInstance > GetInstances()
Definition Scene.hpp:480
int MeshIndex(FUUID id) const
Definition Scene.hpp:503
void Add(FMaterial const &material)
Definition Scene.hpp:412
int CurveIndex(FUUID id) const
Definition Scene.hpp:504
void Add(FAnimationClip const &clip)
Definition Scene.hpp:437
Span< FCamera > GetCameras()
Definition Scene.hpp:449
Span< FMaterial > GetMaterials()
Definition Scene.hpp:483
void Add(FSerializedMesh const &mesh)
Definition Scene.hpp:417
int SkeletonIndex(FUUID id) const
Definition Scene.hpp:505
void Add(FSkeleton const &skeleton)
Definition Scene.hpp:432
Span< FLight > GetLights()
Definition Scene.hpp:452
Span< FInstance const > GetInstances() const
Definition Scene.hpp:479
void Set(FSceneGlobals const &globals)
Definition Scene.hpp:392
int MaterialIndex(FUUID id) const
Definition Scene.hpp:500
uint64_t mWriteOffset
Definition Scene.hpp:384
FUUID InternString(const char *s)
Definition Scene.hpp:508
int TextureIndex(FUUID id) const
Definition Scene.hpp:502
FLight * GetEnvironmentLight()
Definition Scene.hpp:460
FBlobDeserializer GetBlobDeserializer() const
Definition Scene.cpp:1932
Span< FStringEntry const > GetStrings() const
Definition Scene.hpp:490
Span< FCamera const > GetCameras() const
Definition Scene.hpp:448
int InstanceIndex(FUUID id) const
Definition Scene.hpp:499
void Add(FCamera const &camera)
Definition Scene.hpp:397
Span< FMaterial const > GetMaterials() const
Definition Scene.hpp:482
Vector< T > ReadBlobArray(FBlobRef const &blob, Allocator *alloc=GLOBAL_ALLOC) const
Definition Scene.hpp:527
Definition Scene.hpp:20
FUUID material
Definition Scene.hpp:26
FTransform transform
Definition Scene.hpp:21
FUUID resource
Definition Scene.hpp:25
FUUID name
Definition Scene.hpp:24
FInstanceType type
Definition Scene.hpp:22
Definition Scene.hpp:123
bool twoSided
Definition Scene.hpp:138
FUUID environmentTexture
Definition Scene.hpp:141
FTransform transform
Definition Scene.hpp:124
float spotInnerConeAngle
Definition Scene.hpp:132
FUUID name
Definition Scene.hpp:126
float environmentAzimuthOffset
Definition Scene.hpp:142
FUUID id
Definition Scene.hpp:125
float radius
Definition Scene.hpp:131
float3 color
Definition Scene.hpp:128
float width
Definition Scene.hpp:136
bool HasEnvironmentTexture() const
Definition Scene.hpp:146
float power
Definition Scene.hpp:129
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:130
float spotOuterConeAngle
Definition Scene.hpp:133
FLightType type
Definition Scene.hpp:127
Definition Scene.hpp:54
float specularFactor
Definition Scene.hpp:92
float roughnessFactor
Definition Scene.hpp:89
float clearcoatFactor
Definition Scene.hpp:100
FUUID name
Definition Scene.hpp:56
float4 baseColorFactor
Definition Scene.hpp:85
float hairAlpha
Definition Scene.hpp:110
FUUID normalTexture
Definition Scene.hpp:65
float hairBetaM
Definition Scene.hpp:108
float normalScale
Definition Scene.hpp:67
FUUID clearcoatRoughnessTexture
Definition Scene.hpp:83
FUUID specularTexture
Definition Scene.hpp:71
FMaterialShaderBlock shaderBlockID
Definition Scene.hpp:107
float subsurfaceFactor
Definition Scene.hpp:102
FUUID baseColorTexture
Definition Scene.hpp:58
float transmissionFactor
Definition Scene.hpp:90
FUUID anisotropyTexture
Definition Scene.hpp:75
float4 emissiveFactor
Definition Scene.hpp:87
float anisotropyStrength
Definition Scene.hpp:95
float3 subsurfaceRadius
Definition Scene.hpp:106
FUUID sheenRoughnessTexture
Definition Scene.hpp:79
float anisotropyRotation
Definition Scene.hpp:96
FUUID sheenColorTexture
Definition Scene.hpp:77
float sheenRoughnessFactor
Definition Scene.hpp:99
float clearcoatRoughnessFactor
Definition Scene.hpp:101
float metallicFactor
Definition Scene.hpp:88
float hairBetaN
Definition Scene.hpp:109
float3 subsurfaceColor
Definition Scene.hpp:105
FUUID transmissionTexture
Definition Scene.hpp:69
float3 specularColorFactor
Definition Scene.hpp:94
FUUID emissiveTexture
Definition Scene.hpp:60
FUUID metallicRoughnessTexture
Definition Scene.hpp:62
float subsurfaceScale
Definition Scene.hpp:103
float ior
Definition Scene.hpp:91
FUUID specularColorTexture
Definition Scene.hpp:73
FUUID clearcoatTexture
Definition Scene.hpp:81
float3 sheenColorFactor
Definition Scene.hpp:98
Definition Serialization.hpp:45
Definition Scene.hpp:540
bool generateMeshlets
Definition Scene.hpp:547
FSceneTextureCompression textureCompression
Definition Scene.hpp:544
bool generateMipmaps
Definition Scene.hpp:546
bool optimizeMeshes
Definition Scene.hpp:548
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:364
uint32_t payloadAlignment
Definition Scene.hpp:371
uint32_t version
Definition Scene.hpp:372
uint64_t fileSize
Definition Scene.hpp:370
uint64_t payloadOffset
Definition Scene.hpp:369
uint64_t metadataSize
Definition Scene.hpp:368
uint32_t headerSize
Definition Scene.hpp:366
uint64_t metadataOffset
Definition Scene.hpp:367
uint32_t magic
Definition Scene.hpp:365
Definition Scene.hpp:200
HashMap< FUUID, uint32_t > lights
Definition Scene.hpp:204
static int Find(HashMap< FUUID, uint32_t > const &map, FUUID id)
Definition Scene.hpp:216
FSceneIndex(Allocator *alloc=GLOBAL_ALLOC)
Definition Scene.hpp:210
HashMap< FUUID, uint32_t > textures
Definition Scene.hpp:205
HashMap< FUUID, uint32_t > meshes
Definition Scene.hpp:206
HashMap< FUUID, uint32_t > materials
Definition Scene.hpp:203
HashMap< FUUID, uint32_t > skeletons
Definition Scene.hpp:208
HashMap< FUUID, uint32_t > curves
Definition Scene.hpp:207
HashMap< FUUID, uint32_t > instances
Definition Scene.hpp:202
HashMap< FUUID, uint32_t > strings
Definition Scene.hpp:201
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< FAnimationClip > clips
Definition Scene.hpp:188
Vector< FSerializedTexture > textures
Definition Scene.hpp:186
Vector< FSerializedMesh > meshes
Definition Scene.hpp:184
FSceneTables(Allocator *alloc=GLOBAL_ALLOC)
Definition Scene.hpp:191
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
Vector< FSkeleton > skeletons
Definition Scene.hpp:187
FUUID sceneNodeSkeleton
Definition Scene.hpp:189
Definition Curve.hpp:26
Definition Mesh.hpp:106
FBlobRef emissivePrimitiveMap
Definition Mesh.hpp:118
FSerializedBounds bounds
Definition Mesh.hpp:108
FUUID id
Definition Mesh.hpp:107
FBlobRef skinBinding
Definition Mesh.hpp:119
FUUID skeleton
Definition Mesh.hpp:120
uint32_t vertexCount
Definition Mesh.hpp:110
FBlobRef emissiveMeshlets
Definition Mesh.hpp:116
FBlobRef dagMeshlets
Definition Mesh.hpp:113
Vector< FSerializedMeshLOD > lods
Definition Mesh.hpp:111
FBlobRef dagMeshletVtx
Definition Mesh.hpp:115
FBlobRef vertices
Definition Mesh.hpp:109
FBlobRef emissiveAliases
Definition Mesh.hpp:117
FBlobRef dagGroups
Definition Mesh.hpp:112
FBlobRef dagMeshletTri
Definition Mesh.hpp:114
Definition Texture.hpp:46
Definition Animation.hpp:21
Vector< FJoint > joints
Definition Animation.hpp:23
FUUID id
Definition Animation.hpp:22
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:170