diff --git a/data/materials/DefaultMaterial.material b/data/materials/DefaultMaterial.material index c88f3b7..bb3fc0a 100644 --- a/data/materials/DefaultMaterial.material +++ b/data/materials/DefaultMaterial.material @@ -1 +1 @@ -{"color":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.6000000238418579,"y":0.6000000238418579,"z":0.6000000238418579}},"version":3} \ No newline at end of file +{"color":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.6000000238418579,"y":0.6000000238418579,"z":0.6000000238418579}},"normal":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file diff --git a/data/materials/kamen_zid.material b/data/materials/kamen_zid.material index 2559bb8..9f1032e 100644 --- a/data/materials/kamen_zid.material +++ b/data/materials/kamen_zid.material @@ -1 +1 @@ -{"color":{"asset_value":"textures/kamen.png","float_value":0.0,"name":"","type":2,"value":{"x":0.7341179847717285,"y":0.7305880188941956,"z":0.6741179823875427}},"version":3} \ No newline at end of file +{"color":{"asset_value":"textures/kamen.png","float_value":0.0,"name":"","type":2,"value":{"x":0.7341179847717285,"y":0.7305880188941956,"z":0.6741179823875427}},"normal":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file diff --git a/data/materials/kamen_zid_parapet.material b/data/materials/kamen_zid_parapet.material index 3c4fdde..802a735 100644 --- a/data/materials/kamen_zid_parapet.material +++ b/data/materials/kamen_zid_parapet.material @@ -1 +1 @@ -{"color":{"asset_value":"textures/KAMEN-stup.png","float_value":0.0,"name":"","type":2,"value":{"x":0.7341179847717285,"y":0.7305880188941956,"z":0.6741179823875427}},"version":3} \ No newline at end of file +{"color":{"asset_value":"textures/KAMEN-stup.png","float_value":0.0,"name":"","type":2,"value":{"x":0.7341179847717285,"y":0.7305880188941956,"z":0.6741179823875427}},"normal":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file diff --git a/data/materials/kamen_zid_prozor.material b/data/materials/kamen_zid_prozor.material index 2559bb8..9f1032e 100644 --- a/data/materials/kamen_zid_prozor.material +++ b/data/materials/kamen_zid_prozor.material @@ -1 +1 @@ -{"color":{"asset_value":"textures/kamen.png","float_value":0.0,"name":"","type":2,"value":{"x":0.7341179847717285,"y":0.7305880188941956,"z":0.6741179823875427}},"version":3} \ No newline at end of file +{"color":{"asset_value":"textures/kamen.png","float_value":0.0,"name":"","type":2,"value":{"x":0.7341179847717285,"y":0.7305880188941956,"z":0.6741179823875427}},"normal":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file diff --git a/data/materials/pod.material b/data/materials/pod.material index 34b1dc6..9baf8d4 100644 --- a/data/materials/pod.material +++ b/data/materials/pod.material @@ -1 +1 @@ -{"color":{"asset_value":"textures/mramor6x6.png","float_value":0.0,"name":"","type":2,"value":{"x":0.7341179847717285,"y":0.7094119787216187,"z":0.6741179823875427}},"version":3} \ No newline at end of file +{"color":{"asset_value":"textures/mramor6x6.png","float_value":0.0,"name":"","type":2,"value":{"x":0.7341179847717285,"y":0.7094119787216187,"z":0.6741179823875427}},"normal":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file diff --git a/data/materials/pod_rub.material b/data/materials/pod_rub.material index 2559bb8..9f1032e 100644 --- a/data/materials/pod_rub.material +++ b/data/materials/pod_rub.material @@ -1 +1 @@ -{"color":{"asset_value":"textures/kamen.png","float_value":0.0,"name":"","type":2,"value":{"x":0.7341179847717285,"y":0.7305880188941956,"z":0.6741179823875427}},"version":3} \ No newline at end of file +{"color":{"asset_value":"textures/kamen.png","float_value":0.0,"name":"","type":2,"value":{"x":0.7341179847717285,"y":0.7305880188941956,"z":0.6741179823875427}},"normal":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file diff --git a/data/materials/pod_tepih.material b/data/materials/pod_tepih.material index 0b70b5c..b430f33 100644 --- a/data/materials/pod_tepih.material +++ b/data/materials/pod_tepih.material @@ -1 +1 @@ -{"color":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":1.0,"y":0.11999999731779099,"z":0.10000000149011612}},"version":3} \ No newline at end of file +{"color":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":1.0,"y":0.11999999731779099,"z":0.10000000149011612}},"normal":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file diff --git a/data/materials/rozeta.material b/data/materials/rozeta.material index 3c4fdde..802a735 100644 --- a/data/materials/rozeta.material +++ b/data/materials/rozeta.material @@ -1 +1 @@ -{"color":{"asset_value":"textures/KAMEN-stup.png","float_value":0.0,"name":"","type":2,"value":{"x":0.7341179847717285,"y":0.7305880188941956,"z":0.6741179823875427}},"version":3} \ No newline at end of file +{"color":{"asset_value":"textures/KAMEN-stup.png","float_value":0.0,"name":"","type":2,"value":{"x":0.7341179847717285,"y":0.7305880188941956,"z":0.6741179823875427}},"normal":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file diff --git a/data/materials/sprljci.material b/data/materials/sprljci.material index d1fcd3a..23e023c 100644 --- a/data/materials/sprljci.material +++ b/data/materials/sprljci.material @@ -1 +1 @@ -{"color":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.784313976764679,"y":0.784313976764679,"z":0.784313976764679}},"version":3} \ No newline at end of file +{"color":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.784313976764679,"y":0.784313976764679,"z":0.784313976764679}},"normal":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file diff --git a/data/materials/staklo.material b/data/materials/staklo.material index 09741dc..9b82509 100644 --- a/data/materials/staklo.material +++ b/data/materials/staklo.material @@ -1 +1 @@ -{"color":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file +{"color":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"normal":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file diff --git a/data/materials/staklo_crveno.material b/data/materials/staklo_crveno.material index b8f7dd4..67be943 100644 --- a/data/materials/staklo_crveno.material +++ b/data/materials/staklo_crveno.material @@ -1 +1 @@ -{"color":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.44117599725723267,"y":0.10392200201749802,"z":0.04901999980211258}},"version":3} \ No newline at end of file +{"color":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.44117599725723267,"y":0.10392200201749802,"z":0.04901999980211258}},"normal":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file diff --git a/data/materials/staklo_plavo.material b/data/materials/staklo_plavo.material index 09741dc..9b82509 100644 --- a/data/materials/staklo_plavo.material +++ b/data/materials/staklo_plavo.material @@ -1 +1 @@ -{"color":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file +{"color":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"normal":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file diff --git a/data/materials/staklo_zeleno.material b/data/materials/staklo_zeleno.material index 09741dc..9b82509 100644 --- a/data/materials/staklo_zeleno.material +++ b/data/materials/staklo_zeleno.material @@ -1 +1 @@ -{"color":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file +{"color":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"normal":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file diff --git a/data/materials/staklo_zuto.material b/data/materials/staklo_zuto.material index 09741dc..9b82509 100644 --- a/data/materials/staklo_zuto.material +++ b/data/materials/staklo_zuto.material @@ -1 +1 @@ -{"color":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file +{"color":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"normal":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file diff --git a/data/materials/stupovi.material b/data/materials/stupovi.material index 3c4fdde..802a735 100644 --- a/data/materials/stupovi.material +++ b/data/materials/stupovi.material @@ -1 +1 @@ -{"color":{"asset_value":"textures/KAMEN-stup.png","float_value":0.0,"name":"","type":2,"value":{"x":0.7341179847717285,"y":0.7305880188941956,"z":0.6741179823875427}},"version":3} \ No newline at end of file +{"color":{"asset_value":"textures/KAMEN-stup.png","float_value":0.0,"name":"","type":2,"value":{"x":0.7341179847717285,"y":0.7305880188941956,"z":0.6741179823875427}},"normal":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file diff --git a/data/materials/zid_vani.material b/data/materials/zid_vani.material index 2559bb8..9f1032e 100644 --- a/data/materials/zid_vani.material +++ b/data/materials/zid_vani.material @@ -1 +1 @@ -{"color":{"asset_value":"textures/kamen.png","float_value":0.0,"name":"","type":2,"value":{"x":0.7341179847717285,"y":0.7305880188941956,"z":0.6741179823875427}},"version":3} \ No newline at end of file +{"color":{"asset_value":"textures/kamen.png","float_value":0.0,"name":"","type":2,"value":{"x":0.7341179847717285,"y":0.7305880188941956,"z":0.6741179823875427}},"normal":{"asset_value":"","float_value":0.0,"name":"","type":0,"value":{"x":0.0,"y":0.0,"z":0.0}},"version":3} \ No newline at end of file diff --git a/data/models/sibenik.model b/data/models/sibenik.model index ec293be..038584e 100644 Binary files a/data/models/sibenik.model and b/data/models/sibenik.model differ diff --git a/engine/asset/include/asset_types.hpp b/engine/asset/include/asset_types.hpp index f900674..0edff70 100644 --- a/engine/asset/include/asset_types.hpp +++ b/engine/asset/include/asset_types.hpp @@ -42,6 +42,7 @@ struct MaterialProperty { class Material : public Asset { public: MaterialProperty colorProperty; + MaterialProperty normalProperty; float metallic = 0.0f; float roughness = 0.5f; diff --git a/engine/asset/src/asset.cpp b/engine/asset/src/asset.cpp index 94544c1..f68e094 100644 --- a/engine/asset/src/asset.cpp +++ b/engine/asset/src/asset.cpp @@ -266,15 +266,24 @@ std::unique_ptr load_material(const prism::path path) { return mat; } - auto property = j["color"]; - mat->colorProperty.value = property["value"]; - mat->colorProperty.float_value = property["float_value"]; - mat->colorProperty.type = property["type"]; + const auto loadProperty = [](nlohmann::json property) -> MaterialProperty { + MaterialProperty p; + p.value = property["value"]; + p.float_value = property["float_value"]; + p.type = property["type"]; + + if(!property["asset_value"].get().empty()) { + p.value_tex = assetm->get(prism::app_domain / property["asset_value"].get()); + } + + return p; + }; + + mat->colorProperty = loadProperty(j["color"]); + + if(j.contains("normal")) + mat->normalProperty = loadProperty(j["normal"]); - if(!property["asset_value"].get().empty()) { - mat->colorProperty.value_tex = assetm->get(prism::app_domain / property["asset_value"].get()); - } - return mat; } @@ -285,14 +294,19 @@ void save_material(Material* material, const prism::path path) { nlohmann::json j; j["version"] = 3; - nlohmann::json p; - p["name"] = material->colorProperty.name; - p["value"] = material->colorProperty.value; - p["asset_value"] = material->colorProperty.value_tex ? material->colorProperty.value_tex->path : ""; - p["float_value"] = material->colorProperty.float_value; - p["type"] = material->colorProperty.type; + const auto save_property = [](MaterialProperty& property) -> nlohmann::json { + nlohmann::json p; + p["name"] = property.name; + p["value"] = property.value; + p["asset_value"] = property.value_tex ? property.value_tex->path : ""; + p["float_value"] = property.float_value; + p["type"] = property.type; - j["color"] = p; + return p; + }; + + j["color"] = save_property(material->colorProperty); + j["normal"] = save_property(material->normalProperty); std::ofstream out(path); out << j; diff --git a/tools/modelcompiler/src/modeleditor.cpp b/tools/modelcompiler/src/modeleditor.cpp index a27c6cc..c30c30a 100755 --- a/tools/modelcompiler/src/modeleditor.cpp +++ b/tools/modelcompiler/src/modeleditor.cpp @@ -436,6 +436,14 @@ void ModelEditor::compile_model() { mat.colorProperty.type = DataType::AssetTexture; } + aiString normal_path; + if(aiReturn_SUCCESS == aiGetMaterialTexture(sc->mMaterials[i], aiTextureType_NORMALS, 0, &normal_path)) { + mat.normalProperty.type = DataType::AssetTexture; + mat.normalProperty.value_tex.handle = new Texture(); + mat.normalProperty.value_tex->path = std::string("textures/") + normal_path.C_Str(); + mat.normalProperty.type = DataType::AssetTexture; + } + save_material(&mat, path); } }