Unravel Engine C++ Reference
Loading...
Searching...
No Matches
model.cpp
Go to the documentation of this file.
1#include "model.hpp"
2#include "material.hpp"
3#include "mesh.hpp"
4
7
12
13namespace unravel
14{
16{
17 auto is_lod_override_enabled_predicate = entt::property_predicate<bool>(
18 [](const entt::meta_any& i)
19 {
20 return i.try_cast<model>()->get_lod_override_enabled();
21 });
22
23
24 entt::meta_factory<model>{}
25 .type("model"_hs)
27 entt::attribute{"name", "model"},
28 entt::attribute{"pretty_name", "Model"},
29 })
30 .data<&model::set_materials, &model::get_materials>("materials"_hs)
32 entt::attribute{"name", "materials"},
33 entt::attribute{"pretty_name", "Materials"},
34 entt::attribute{"tooltip", "Materials for this model."},
35 })
36 .data<&model::set_material_instances, &model::get_material_instances>("material_instances"_hs)
38 entt::attribute{"name", "material_instances"},
39 entt::attribute{"pretty_name", "Material Instances"},
40 entt::attribute{"tooltip", "Material instances for this model."},
41 })
42 .data<&model::set_lods, &model::get_lods>("lods"_hs)
44 entt::attribute{"name", "lods"},
45 entt::attribute{"pretty_name", "LOD"},
46 entt::attribute{"tooltip", "Explicit Levels of Detail. If not set, the model will use\n"
47 "the automatically generated mesh LODs (if any) based on the screen size."},
48 })
49 .data<&model::set_lod_override_enabled, &model::get_lod_override_enabled>("lod_override_enabled"_hs)
51 entt::attribute{"name", "lod_override_enabled"},
52 entt::attribute{"pretty_name", "LOD Override"},
53 entt::attribute{"tooltip", "Enable to force a specific LOD level regardless of distance."},
54 })
55 .data<&model::set_lod_override_level, &model::get_lod_override_level>("lod_override_level"_hs)
57 entt::attribute{"name", "lod_override_level"},
58 entt::attribute{"pretty_name", "Override Level"},
59 entt::attribute{"tooltip", "The LOD level to use when override is enabled."},
60 entt::attribute{"predicate", is_lod_override_enabled_predicate},
61 entt::attribute{"min", 0},
63 })
64 .data<&model::set_lod_selection_bias, &model::get_lod_selection_bias>("lod_selection_bias"_hs)
66 entt::attribute{"name", "lod_selection_bias"},
67 entt::attribute{"pretty_name", "LOD Selection Bias"},
68 entt::attribute{"tooltip", "The value added to the calculated LOD index. Increasing this value results in selecting less detailed LODs, reducing the value - in more detailed LODs."},
69 entt::attribute{"readonly_predicate", is_lod_override_enabled_predicate},
72 })
73 .data<&model::set_lod_transition_time, &model::get_lod_transition_time>("lod_transition_time"_hs)
75 entt::attribute{"name", "lod_transition_time"},
76 entt::attribute{"pretty_name", "LOD Transition Time"},
77 entt::attribute{"tooltip", "Duration of LOD transitions in seconds (0 = instant switch, >0 = smooth dithered crossfade)."},
78 entt::attribute{"min", 0.0f},
79 entt::attribute{"max", 2.0f},
80 });
81}
82
84{
85 try_save(ar, ser20::make_nvp("lods", obj.mesh_lods_));
86 try_save(ar, ser20::make_nvp("materials", obj.materials_));
87 try_save(ar, ser20::make_nvp("material_instances", obj.material_instances_));
88 try_save(ar, ser20::make_nvp("lod_override_enabled", obj.lod_override_enabled_));
89 try_save(ar, ser20::make_nvp("lod_override_level", obj.lod_override_level_));
90 try_save(ar, ser20::make_nvp("lod_selection_bias", obj.lod_selection_bias_));
91 try_save(ar, ser20::make_nvp("lod_transition_time", obj.lod_transition_time_));
92}
95
97{
98 std::vector<asset_handle<mesh>> lods = obj.get_lods();
99 try_load(ar, ser20::make_nvp("lods", lods));
100 obj.set_lods(lods);
101 try_load(ar, ser20::make_nvp("materials", obj.materials_));
102 try_load(ar, ser20::make_nvp("material_instances", obj.material_instances_));
103 try_load(ar, ser20::make_nvp("lod_override_enabled", obj.lod_override_enabled_));
104 try_load(ar, ser20::make_nvp("lod_override_level", obj.lod_override_level_));
105 try_load(ar, ser20::make_nvp("lod_selection_bias", obj.lod_selection_bias_));
106 try_load(ar, ser20::make_nvp("lod_transition_time", obj.lod_transition_time_));
107}
110} // namespace unravel
static auto get_max_generated_lod_count() -> uint32_t
Gets the maximum number of LODs that can be generated for a mesh.
Definition mesh.cpp:2013
Structure describing a LOD group (set of meshes), LOD transitions, and their materials.
Definition model.h:275
auto property_predicate(property_predicate_t< T > predicate) -> property_predicate_t< T >
Definition reflection.h:89
attributes::value_type attribute
Definition reflection.h:19
std::map< std::string, meta_any > attributes
Definition reflection.h:18
BinaryInputArchive iarchive_binary_t
simd::JSONOutputArchive oarchive_associative_t
BinaryOutputArchive oarchive_binary_t
simd::JSONInputArchive iarchive_associative_t
#define REFLECT(cls)
Definition reflection.h:149
#define SAVE_INSTANTIATE(cls, Archive)
#define LOAD(cls)
auto try_save(Archive &ar, ser20::NameValuePair< T > &&t, const hpp::source_location &loc=hpp::source_location::current()) -> bool
#define LOAD_INSTANTIATE(cls, Archive)
#define SAVE(cls)
auto try_load(Archive &ar, ser20::NameValuePair< T > &&t, const hpp::source_location &loc=hpp::source_location::current()) -> bool