diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/collada/EffectExporter.cpp | 9 | ||||
-rw-r--r-- | source/blender/collada/EffectExporter.h | 2 | ||||
-rw-r--r-- | source/blender/collada/collada_utils.cpp | 37 | ||||
-rw-r--r-- | source/blender/collada/collada_utils.h | 4 |
4 files changed, 22 insertions, 30 deletions
diff --git a/source/blender/collada/EffectExporter.cpp b/source/blender/collada/EffectExporter.cpp index b2bf09665ca..3494cdbada4 100644 --- a/source/blender/collada/EffectExporter.cpp +++ b/source/blender/collada/EffectExporter.cpp @@ -114,11 +114,10 @@ void EffectsExporter::set_diffuse_color(COLLADASW::EffectProfile &ep, Material * ep.setDiffuse(cot, false, "diffuse"); } -void EffectsExporter::set_specular_color(COLLADASW::EffectProfile &ep, Material *ma) +void EffectsExporter::set_reflectivity(COLLADASW::EffectProfile &ep, Material *ma) { - bool use_fallback = ep.getShaderType() != COLLADASW::EffectProfile::LAMBERT; - COLLADASW::ColorOrTexture cot = bc_get_specular_color(ma, use_fallback); - ep.setSpecular(cot, false, "specular"); + double reflectivity = bc_get_reflectivity(ma); + ep.setReflectivity(reflectivity, false, "specular"); } void EffectsExporter::set_emission(COLLADASW::EffectProfile &ep, Material *ma) @@ -182,7 +181,7 @@ void EffectsExporter::operator()(Material *ma, Object *ob) set_transparency(ep, ma); set_diffuse_color(ep, ma); - set_specular_color(ep, ma); + set_reflectivity(ep, ma); set_emission(ep, ma); get_images(ma, material_image_map); diff --git a/source/blender/collada/EffectExporter.h b/source/blender/collada/EffectExporter.h index 1928c5cbdb5..3ba642088a1 100644 --- a/source/blender/collada/EffectExporter.h +++ b/source/blender/collada/EffectExporter.h @@ -55,7 +55,7 @@ private: void set_shader_type(COLLADASW::EffectProfile &ep, Material *ma); void set_transparency(COLLADASW::EffectProfile &ep, Material *ma); void set_diffuse_color(COLLADASW::EffectProfile &ep, Material *ma); - void set_specular_color(COLLADASW::EffectProfile &ep, Material *ma); + void set_reflectivity(COLLADASW::EffectProfile &ep, Material *ma); void set_emission(COLLADASW::EffectProfile &ep, Material *ma); void get_images(Material *ma, KeyImageMap &uid_image_map); void create_image_samplers(COLLADASW::EffectProfile &ep, KeyImageMap &uid_image_map, std::string &active_uv); diff --git a/source/blender/collada/collada_utils.cpp b/source/blender/collada/collada_utils.cpp index 37a4608fe29..faf00cf11d8 100644 --- a/source/blender/collada/collada_utils.cpp +++ b/source/blender/collada/collada_utils.cpp @@ -1362,20 +1362,6 @@ COLLADASW::ColorOrTexture bc_get_base_color(Material *ma) } } -COLLADASW::ColorOrTexture bc_get_specular_color(Material *ma, bool use_fallback) -{ - bNode *master_shader = bc_get_master_shader(ma); - if (ma->use_nodes && master_shader) { - return bc_get_specular_color(master_shader); - } - else if (use_fallback) { - return bc_get_cot(ma->specr * ma->spec, ma->specg * ma->spec, ma->specb * ma->spec, 1.0f); - } - else { - return bc_get_cot(0.0, 0.0, 0.0, 1.0); // no specular - } -} - COLLADASW::ColorOrTexture bc_get_base_color(bNode *shader) { bNodeSocket *socket = nodeFindSocket(shader, SOCK_IN, "Base Color"); @@ -1390,18 +1376,25 @@ COLLADASW::ColorOrTexture bc_get_base_color(bNode *shader) } } -COLLADASW::ColorOrTexture bc_get_specular_color(bNode *shader) +bool bc_get_reflectivity(bNode *shader, double &reflectivity) { bNodeSocket *socket = nodeFindSocket(shader, SOCK_IN, "Specular"); - if (socket) - { - bNodeSocketValueRGBA *dcol = (bNodeSocketValueRGBA *)socket->default_value; - float* col = dcol->value; - return bc_get_cot(col[0], col[1], col[2], col[3]); + if (socket) { + bNodeSocketValueFloat *ref = (bNodeSocketValueFloat *)socket->default_value; + reflectivity = (double)ref->value; + return true; } - else { - return bc_get_cot(0.8, 0.8, 0.8, 1.0); //default white + return false; +} + +double bc_get_reflectivity(Material *ma) +{ + double reflectivity = ma->spec; // fallback if no socket found + bNode *master_shader = bc_get_master_shader(ma); + if (ma->use_nodes && master_shader) { + bc_get_reflectivity(master_shader, reflectivity); } + return reflectivity; } bNode *bc_get_master_shader(Material *ma) diff --git a/source/blender/collada/collada_utils.h b/source/blender/collada/collada_utils.h index 32c89cf41e6..b68da4e8154 100644 --- a/source/blender/collada/collada_utils.h +++ b/source/blender/collada/collada_utils.h @@ -310,8 +310,8 @@ void bc_add_default_shader(bContext *C, Material *ma); bNode *bc_get_master_shader(Material *ma); COLLADASW::ColorOrTexture bc_get_cot(float r, float g, float b, float a); COLLADASW::ColorOrTexture bc_get_base_color(bNode *shader); +bool bc_get_reflectivity(bNode *shader, double &reflectivity); +double bc_get_reflectivity(Material *ma); COLLADASW::ColorOrTexture bc_get_base_color(Material *ma); -COLLADASW::ColorOrTexture bc_get_specular_color(bNode *shader); -COLLADASW::ColorOrTexture bc_get_specular_color(Material *ma, bool use_fallback); #endif |